Une classe dans laquelle la définition et l'instanciation de classe sont décrites dans une seule expression sans spécifier le nom de la classe. Vous pouvez implémenter l'interface, récupérer la méthode, hériter de la classe, remplacer la méthode et récupérer la méthode sans spécifier le nom de la classe, ce qui est pratique lorsque vous souhaitez utiliser la méthode uniquement sur place.
interface Inter{
void methodA();
}
class SuperT{
void methodS() {
System.out.println("Super");
}
}
class OuterT{ //Classe extérieure
void method1() {
new Inter() { //Implémenter et instancier l'interface en même temps
public void methodA() {
System.out.println("méthode Une mise en œuvre");
}
}.methodA(); //Appeler methodA depuis celui instancié
}
/*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("-----Lorsqu'il est appelé après l'affectation à une variable de type SuperT-----");
SuperT st = new SuperT() { //Affecter à une variable de type superclasse
void methodS() {
System.out.println("Override");
}
void methodSub() { //Méthode propriétaire de sous-classe anonyme
System.out.println("Sub");
}
};
st.methodS();
//st.methodSub(); //Vous ne pouvez pas appeler des méthodes uniques aux sous-classes anonymes avec des variables de type superclasse
System.out.println("-----Lorsqu'il est appelé directement depuis un objet-----");
new SuperT() {
void methodS() {
System.out.println("Override");
}
void methodSub() {
System.out.println("Sub");
}
}.methodSub(); //Peut être appelé directement
}
}
méthode Une mise en œuvre
-----Lorsqu'il est appelé après l'affectation à une variable de type SuperT-----
Override
-----Lorsqu'il est appelé directement depuis un objet-----
Sub
(1) Lors de l'héritage d'une classe, les sous-classes anonymes peuvent remplacer la méthode.
(2) Lorsqu'une sous-classe anonyme qui hérite d'une superclasse est affectée à une variable de type superclasse puis appelée, seules les méthodes (y compris les méthodes remplacées) de la superclasse peuvent être appelées. (Le mécanisme est le même que pour les superclasses et sous-classes normales, et la plage accessible change en fonction du type de variable.)
(3) Lors d'un appel direct depuis un objet, la méthode initialement définie dans la sous-classe anonyme peut également être appelée.
Recommended Posts