Czy anonimowa klasa w Javie może mieć inne metody niż jej nadklasa? [duplikować]

Dec 27 2020

Wiem, że klasy anonimowe są dobre do nadpisywania i tak dalej, ale zastanawiam się, czy można dodać inne metody, których nie ma w klasie nadrzędnej, jak w przykładzie poniżej.

To jest moja klasa z wieBenIk jako jedyną metodą.

public class Driehoek {

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

}

a oto moja anonimowa klasa, w której dodałem newMethod.

public class 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();

}

}

Moje pytanie brzmi: dlaczego test.newMethod () nie działa? Czy to nie jest klasa dla dzieci jak inna? Dziękuję wszystkim za pomoc.

Odpowiedzi

SJuan76 Dec 27 2020 at 05:44

test jest zadeklarowany jako instancja Driehoek . W związku z tym kompilator będzie zawierał członków Driehoek .

Podobnie, jeśli zdefiniujesz

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

dla testu kompilatora będą dostępne tylko składowe Object .

Jeśli dodasz więcej członków do klasy anonimowej, kompilator nie będzie wiedział, że test ma dostępne te metody. Więc to nie pozwala ci ich używać