【发布时间】:2017-04-21 16:31:28
【问题描述】:
考虑下面的代码:
abstract class AbstractClass {
abstract m1();
}
public class Test {
public static void main(String [] args) {
AbstractClass obj = new AbstractClass() {
@Override void m1() {
System.out.print("Instance of abstract class !");
}
};
obj.m1();
}
}
下面是我对这段代码不理解的地方。
我读到匿名类创建了具有未知名称的类,该类扩展了提供引用的类(这里是抽象抽象类)。
另外我记得如果对象有父类的引用,我们不能实现子类的方法。
见下面的代码块
Parent obj = new Child();
obj.methodOfParent();
obj.methodOfChild(); //this gives error
现在我的观点是,如果 Anonymous Class 扩展了它的 Parent Class 提供了引用,那么我们如何从 Anonymous Class 调用 Parent Class 的重写方法? p>
【问题讨论】:
-
这很不清楚 - 你是在问为什么可以做到
obj.m1()? -
是的,@Oliver Charlesworth
-
这是一个非常不清楚的问题。但需要指出的一件事是
Parent obj = new Child(); obj.methodOfParent();将调用 Child 类的 methodOfParent(它要么继承自 Parent,要么覆盖并提供新的实现)。 -
On "如果对象有父类的引用,我们不能实现子类的方法" -- 你的意思是你不能调用 仅通过父类类型的变量在子类中的方法? [请注意,没有 Java 变量是对象——它们要么是原语,要么是对对象的引用。]
-
如果您的问题是为什么不能从匿名类调用任何方法,而只能调用父/接口中定义的方法,那么答案是:因为您引用了该类型。在您的代码中,您有一个引用
Parent obj。因此,您只能通过此引用调用Parent中定义的方法。这与抽象类无关,而与继承有关。
标签: java anonymous anonymous-class