【发布时间】:2021-07-18 10:13:08
【问题描述】:
在Anonymous Inner Class 中定义额外的方法(不覆盖超类方法)时,代码编译良好,没有任何问题,但是如果我尝试调用额外的方法,则会引发错误。那么当使用anonymous inner class 扩展时,是否只能在子类中使用override 方法?如果是这样,谁能解释一下为什么?
这是我的代码的样子
class SomeClass {
public static void main(String[] args) {
SomeOtherClass a = new SomeOtherClass() {
@Override
public void methodFromSuperClass() {
System.out.println("Method from super class!");
}
public void subClassMethod() {
System.out.println("Sub class method");
}
};
a.methodFromSuperClass(); //This works fine
a.subClassMethod(); // But calling this extra method throws an error
}
}
这是我遇到的错误
SomeClass.java:20: error: cannot find symbol
a.subClassMethod();
^
symbol: method subClassMethod()
location: variable a of type SomeOtherClass
1 error
【问题讨论】:
-
您的变量
a的类型为SomeOtherClass。似乎这种类型根本没有方法subClassMethod。所以编译器是正确的。添加公共成员没有多大意义,因为您无法访问它。 -
您可能想看看Official Java Doc on Anonymous Inner Classes。可以在你的类中添加方法,关键是它只能在类的范围内访问。
-
@Seelenvirtuose 很糟糕,我把它和
Dynamic Method Dispatch混淆了
标签: java anonymous-class