![](/img/trans.png)
[英]State of Derived class object when Base class constructor calls overridden method in Java
[英]Will a base class' method calls be directed to the derived class' overridden methods?
给定一个类A
,它具有两个实例方法x()
和y()
,其中x()
调用y()
,而一个类B
扩展了A
并覆盖了它的y()
方法,
在类型B
的实例上调用x()
的行为是什么?
它调用A
定义的y()
还是B
覆盖的y()
?
如果不确定会发生什么,则很容易测试:
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();
}
输出是
斧头
因此,您可以看到确实调用了覆盖方法。
子类方法将被调用。 这意味着将调用B的y()方法。
原因是你做了
A a = new B();
a.x();
因此,它在运行时指向B的对象。
如果你这样做
B b = new B();
b.x();
这将是编译错误,因为b不包含x方法,因此编译器无法解决它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.