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

时间:2014-11-19 08:37:52

标签: java

给定一个类A,它有两个实例方法x()y(),其中x()调用y(),一个类B扩展A并覆盖它的y()方法,

x()类型的实例上调用B的行为是什么?

是否会调用y()中定义的Ay()中被覆盖的B

2 个答案:

答案 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方法,因此编译器无法解析它。

相关问题