jor*_*npg 4 java anonymous-class java-7
如果匿名类正在扩展/实现类/接口,为什么我不能添加新方法?
换句话说,这有效:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用:
class C {
A anonA() {
return new A() {
void b() {
System.out.println("b in C");
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
鉴于:
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()
}
Run Code Online (Sandbox Code Playgroud)
在编译时,方法调用是根据调用它们的表达式的类型确定的.在您的示例中,您尝试调用b()类型的表达式A.A不声明b()方法,因此它不起作用.
它也不适用于您的具体B类示例
A notAnonA = new B();
notAnonA.b(); // fails to compile
Run Code Online (Sandbox Code Playgroud)
你可以在新的匿名类的主体内添加一个新方法,但是你只能在类或实际的新匿名类实例创建表达式中使用它.
new A() {
void undeclared() {}
}.undeclared();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |