我最近遇到了一个关于java多级继承的问题,问题如下:
public class Test{
public static void main(String[] args) {
A c = new C();
c.print();
}
}
class A{
public void print(){
System.out.println("Inside A");
}
}
class B extends A{
@Override
public void print(){
System.out.println("Inside B");
}
}
class C extends B{
}所以我的问题是为什么这是打印为“在B"。因为C类没有覆盖方法print(),因此它应该基于编译时解析方法,因此应该将打印为“is”。如果我遗漏了什么请告诉我。谢谢你的帮助。
发布于 2015-11-02 19:26:13
C扩展了B,这意味着它将具有与B相同的方法,而且这个例子B已经重写了该方法,因此C也会有它。
发布于 2015-11-02 19:26:04
因为这是C正在扩展的类,所以B是C的超类。
发布于 2015-11-02 19:31:17
你混淆了两件事。
如果方法被重写一次或多次,则将运行最特定子类中的版本。这就是为什么在B中使用的版本。
另一方面,在重载方法之间进行选择时,决策是基于参数的编译时间类型。
https://stackoverflow.com/questions/33485286
复制相似问题