【发布时间】:2019-02-26 20:18:05
【问题描述】:
我正在准备 Java 考试,有一个关于静态和动态类型的问题。
我有 4 个班级:A、B、C 和 Main。
public class A {
private void tell(){
System.out.println("AA");
}
}
public class B extends A {
public void tell(){
System.out.println("BB");
}
}
public class C extends B {
}
public class Main{
public static void main(String[] args) {
A c = new C();
c.tell();
}
}
我的建议是:输出应该是“BB”,因为 c 具有动态类型 C。由于 C 没有“tell”方法,所以使用上层 B 的方法,它会打印“BB”。
然而结果是一个错误,因为Java在A中寻找“tell”。在A中它当然找不到它,因为它被声明为private。但是为什么在A里面看,虽然只是静态类型是A,而动态类型是C呢?
【问题讨论】:
标签: java dynamic static overwrite