Может ли анонимный класс в Java иметь другие методы, кроме его суперкласса? [дубликат]

Dec 27 2020

Я знаю, что анонимные классы хороши для переопределения и так далее, но мне интересно, можете ли вы также добавить другие методы, которых нет в родительском классе, как в примере ниже.

Это мой класс с wieBenIk в качестве единственного метода.

public class Driehoek {

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

}

и вот мой анонимный класс, в который я добавил 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();

}

}

У меня вопрос: почему test.newMethod () не работает? Разве этот дочерний класс не похож на другой? Спасибо всем за помощь.

Ответы

SJuan76 Dec 27 2020 at 05:44

test объявлен как экземпляр Driehoek . Таким образом, для компилятора у него будут члены Driehoek .

Точно так же, если вы определите

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

для теста компилятора будут доступны только члены Object .

Если вы добавите больше членов в анонимный класс, компилятор не узнает, что у теста есть эти методы. Значит, это не позволяет вам их использовать