给定一个类A
,它有两个实例方法x()
和y()
,其中x()
调用y()
,一个类B
扩展A
并覆盖它的y()
方法,
在x()
类型的实例上调用B
的行为是什么?
是否会调用y()
中定义的A
或y()
中被覆盖的B
?
答案 0 :(得分:2)
如果对发生的事情有疑问,那么它很容易测试:
static class A {
public void x() {
System.out.println("A.x");
y();
}
public void y() {
System.out.println("A.y");
}
}
static class B extends A{
public void y() {
System.out.println("B.y");
}
}
public static void main(String[] args) {
A b = new B();
b.x();
}
输出
A.x B.y
所以你可以看到调用覆盖的方法。
答案 1 :(得分:0)
将调用子类方法。这意味着将调用来自B的y()方法。
原因是你做了
A a = new B();
a.x();
所以它在运行时指向B的对象。
如果你这样做
B b = new B();
b.x();
这将是编译错误,因为b不包含x方法,因此编译器无法解析它。