Если анонимный класс расширяет/реализует класс/интерфейс, почему я не могу добавить новый метод?Почему я не могу вызвать методы, добавленные в анонимный класс в Java?
Другими словами, это работает:
class A {
void a() {
System.out.println("a in A");
}
}
class B extends A {
@Override
void a() {
System.out.println("a in B");
}
void b() {
System.out.println("b in B");
}
}
Почему не эта работа:
class C {
A anonA() {
return new A() {
void b() {
System.out.println("b in C");
}
};
}
}
Дано:
public static void main(String[] args) {
B b = new B();
b.b();
// C c = new C();
// A anonA = c.anonA();
// anonA.b();
// yields: java: cannot find symbol \ symbol: method b()
}
Вы можете добавить их. Вы просто не можете назвать их вне анонимного внутреннего класса. Как бы вы ссылались на них? Какой класс? У него нет имени, нет ссылки. –
Ссылка 'anonA' имеет тип' A', и этот тип не имеет метода 'b()'. Аналогично, если вы объявите «Список list = new LinkedList <>()', вы не сможете вызывать 'list.addFirst (« Foo »)' метод из 'list', потому что интерфейс' List' не имеет ' addFirst' (даже если этот метод присутствует в 'LinkedList'). –
Pshemo