繁体   English   中英

是否将基类的方法调用定向到派生类的重写方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM