Une classe anonyme en Java peut-elle avoir d'autres méthodes que sa superclasse? [dupliquer]

Dec 27 2020

Je sais que les classes anonymes sont bonnes pour la substitution et ainsi de suite, mais je me demande si vous pouvez également ajouter d'autres méthodes qui n'existent pas dans la classe parente comme dans l'exemple ci-dessous.

Ceci est ma classe avec wieBenIk comme seule méthode.

public class Driehoek {

//methoden
public void wieBenIk(){
    System.out.println("ik ben een driehoek");
}

}

et voici ma classe anonyme où j'ai ajouté newMethod.

classe publique Main {

public static void main(String[] args) {

    Driehoek test = new Driehoek(){

        @Override
        public void wieBenIk() {
            System.out.println("overrided by anonymous class");
        }

        public void newMethod(){
            System.out.println("I am a new method");
        }
    };

    test.newMethod();

}

}

Ma question est pourquoi test.newMethod () ne fonctionne pas? N'est-ce pas une classe enfant comme une autre? Merci à tous de m'avoir aidé.

Réponses

SJuan76 Dec 27 2020 at 05:44

test est déclaré comme une instance de Driehoek . En tant que tel, pour le compilateur, il aura les membres de Driehoek .

De même, si vous définissez

Object test = new Driehoek() {....};

pour le test du compilateur , seuls les membres Object seront disponibles .

Si vous ajoutez plus de membres à la classe anonyme, le compilateur ne saura pas que test a ces méthodes disponibles. Donc ça ne vous permet pas de les utiliser