在 Anonymous Inner Class
代码编译得很好,没有任何问题,但如果我试图调用额外的方法,它会抛出一个错误。那么,只有 override
使用 anonymous inner class
? 如果是这样,谁能解释一下原因吗?
我的代码是这样的
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
2条答案
按热度按时间svmlkihl1#
这种情况与匿名类的名称完全相同:
你做到了:
你不同意你不能打电话吗
subClassMethod
在这里?毕竟,编译器知道这一点a
属于类型SomeOtherClass
,但不是SomeOtherClass
它是。它不会在很久以前分析您的代码来查看您实际分配的示例Subclass
去吧。匿名类的情况基本相同。只是这一次,子类在你的代码中没有名字,但它仍然是一个子类,同样的推理“编译器不会在很久以前分析你的代码”。
由于匿名子类没有名称,因此不能执行以下操作
Subclass a = new Subclass();
与命名子类示例一样,但由于java 10,您可以执行以下操作:a.subClassMethod();
l2osamch2#
你的假设是正确的。这样调用unoverrided方法是不可能的。考虑一个例子,在这个例子中,您声明了一个接口并用一个具体的类示例化了它,那么您仍然只能访问接口中定义的方法,而不能访问类中定义的方法。
希望现在更清楚这是什么意思