一个超类变量能否访问子类重写的方法?例如:
class A {
void callMe() {
System.out.println("Inside A");
}
}
class B extends A {
void callMe() {
System.out.println("Inside B");
}
}
class Dispatch {
public static void main(String args[]) {
A a = new A();
B b = new B(); // Object of type B
A r; // Obtain a reference of type A
r = a; // Refers to A object
r.callMe(); // Calls A's version of callMe()
r = b; // Refers to B object
r.callMe(); // calls B's version of callMe() and my question is on this
}
}
我前面学到的是,一个引用子类对象的超类变量只能访问由超类定义的那些对象部分。那么第二个 r.callMe()
怎么会调用 B
版本的 callMe()
呢?它应该再次调用 A
版本的 callMe()
。
B
(无论引用是什么),将调用对象的方法。 - Kayamanr
指向A
的引用,因此它与A
相同,然后r
指向B
的引用,因此它调用了B
的callme()
。 - Haris Qurashi