我有两个类: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"?
答案 0 :(得分:0)
当通过超类引用调用重写的方法时,Java根据调用发生时所引用的对象的类型来确定要执行该方法的版本。因此,此确定是在运行时进行的。
所引用的对象的类型(而不是引用变量的类型)确定将执行哪个版本的重写方法。
{{1}}