Проблема в том, что анонимный класс не имеет имени типа (поэтому он и называется анонимным).
Вы присвоили экземпляр анонимного класса переменной типа Test
, а тип Test
не имеет метода с именем doStuff
.
Таким образом, вы не можете присвоить экземпляр анонимного класса любой переменной, а затем вызвать для него метод, который не определен в суперклассе.
Однако можно вызвать метод, если вы не присвоите его:
public class Test {
public static void main(String[] args) {
new Test(){
public void doStuff(){
System.out.println("Test");
}
}.doStuff();
}
}
Обратите внимание, что существует несколько ситуаций, в которых это полезно в реальной программе Java.
Я просто показываю это, чтобы подчеркнуть источник проблемы: анонимным классам, безусловно, разрешено иметь методы, которые не определены в суперклассе, и единственная причина, по которой вы не можете легко вызвать их, заключается в том, что тип класса анонимный ( не имеет имени). Но они по-прежнему существуют и могут быть вызваны непосредственно в экземпляре.
person
Erwin Bolwidt
schedule
12.06.2015