4
如果一個匿名類正在擴展/實現一個類/接口,爲什麼我不能添加一個新的方法?爲什麼我不能在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()
}
您可以添加它們。你不能在匿名內部類之外調用它們。你會如何參考他們?它是什麼類?它沒有名字,沒有參考。 – 2014-10-04 00:53:24
'anonA'引用的類型爲'A',並且此類型沒有'b()'方法。同樣的,如果你聲明'List list = new LinkedList <>()''''list'',你將無法從'list'調用list.addFirst(「Foo」)'方法,因爲'List'接口沒有' addFirst'方法(即使此方法存在於「LinkedList」中)。 –
Pshemo
2014-10-04 01:00:49