方法调用会调用类类型还是实例类型?

时间:2019-05-16 01:28:38

标签: java inheritance

我有两个类:A和B,并且B是A的子类(B扩展了A)。类A包含方法:doSomething(),类B用doSomething()覆盖此方法。如果我声明一个变量= new B();然后我调用variable.doSomething(),它将引用哪个类?

class A {
    public void doSomething() {
        System.out.println("classA");
    }
}
class B extends A {
    public void doSomething() {
        System.out.println("classB");
    }
}

A variable = new B();
variable.doSomething();
//Will this print "classA or classB"?

1 个答案:

答案 0 :(得分:0)

当通过超类引用调用重写的方法时,Java根据调用发生时所引用的对象的类型来确定要执行该方法的版本。因此,此确定是在运行时进行的。

所引用的对象的类型(而不是引用变量的类型)确定将执行哪个版本的重写方法。

{{1}}