gpt4 book ai didi

java - 为什么我不能在 Java 中调用添加到匿名类的方法?

转载 作者:搜寻专家 更新时间:2023-11-01 01:34:05 25 4
gpt4 key购买 nike

如果匿名类正在扩展/实现类/接口(interface),为什么我不能添加新方法?

换句话说,这是可行的:

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()
}

最佳答案

在编译时,方法调用是根据调用它们的表达式的类型来确定的。在您的示例中,您正试图对 A 类型的表达式调用 b()A 没有声明 b() 方法,因此它不会工作。

它也不适用于您的具体 B 类示例

A notAnonA = new B();
notAnonA.b(); // fails to compile

您可以很好地在新匿名类的主体内添加新方法,但您只能在类内或实际的新匿名类实例创建表达式上使用它。

new A() {
void undeclared() {}
}.undeclared();

关于java - 为什么我不能在 Java 中调用添加到匿名类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26188574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com