Eine Klasse, in der die Klassendefinition und -instanziierung in einem einzigen Ausdruck ohne Angabe des Klassennamens beschrieben werden. Sie können die Schnittstelle implementieren, die Methode abrufen, die Klasse erben, überschreiben und die Methode abrufen, ohne den Klassennamen anzugeben. Dies ist praktisch, wenn Sie die Methode nur vor Ort verwenden möchten.
interface Inter{
void methodA();
}
class SuperT{
void methodS() {
System.out.println("Super");
}
}
class OuterT{ //Äußere Klasse
void method1() {
new Inter() { //Implementieren und instanziieren Sie die Schnittstelle gleichzeitig
public void methodA() {
System.out.println("methodA Implementierung");
}
}.methodA(); //Rufen Sie methodA aus dem instanziierten auf
}
/*void method2() {
new SuperT() {
void methodS() {
System.out.println("Override");
}
}.methodS();
}*/
}
public class Tokumei {
public static void main(String[] args) {
OuterT ot = new OuterT();
ot.method1();
//ot.method2();
System.out.println("-----Wird aufgerufen, nachdem eine Variable vom Typ SuperT zugewiesen wurde-----");
SuperT st = new SuperT() { //Weisen Sie eine Variable vom Typ Superklasse zu
void methodS() {
System.out.println("Override");
}
void methodSub() { //Anonyme Methode der anonymen Unterklasse
System.out.println("Sub");
}
};
st.methodS();
//st.methodSub(); //Sie können keine Methoden aufrufen, die nur für anonyme Unterklassen mit Variablen vom Typ Superklasse gelten
System.out.println("-----Beim direkten Aufruf von einem Objekt-----");
new SuperT() {
void methodS() {
System.out.println("Override");
}
void methodSub() {
System.out.println("Sub");
}
}.methodSub(); //Kann direkt aufgerufen werden
}
}
methodA Implementierung
-----Wird aufgerufen, nachdem eine Variable vom Typ SuperT zugewiesen wurde-----
Override
-----Beim direkten Aufruf von einem Objekt-----
Sub
(1) Beim Erben einer Klasse können anonyme Unterklassen die Methode überschreiben.
(2) Wenn eine anonyme Unterklasse, die eine Oberklasse erbt, einer Variablen vom Typ Oberklasse zugewiesen und dann aufgerufen wird, können nur die Methoden (einschließlich überschriebener) in der Oberklasse aufgerufen werden. (Der Mechanismus ist der gleiche wie für normale Ober- und Unterklassen, und der zugängliche Bereich ändert sich je nach Variablentyp.)
(3) Beim direkten Aufruf von einem Objekt kann auch die ursprünglich in der anonymen Unterklasse festgelegte Methode aufgerufen werden.
Recommended Posts