所以這是非常基本的,但我無法得到它。讓我們假設我們有2類A,B(繼承A):Java覆蓋參考
class A {
public void m() {System.out.println("AAA");}
}
class B extends A {
public void m() {System.out.println("BBB"); }
}
我們的主類:
class Test{
public static void main(String [] args){
A a=new A(); B b=new B(); A x;
x=a; x.m(); // "AAA"
x=b; x.m(); // "BBB"
a=b; a.m(); // "BBB"
b=a; b.m(); // ERROR
}}
我的理解是 'X' 是A型的空引用,因爲沒有任何對象被創建。當我鍵入x = a;對null的引用現在指向A的實例。如果我調用x.m(),它會打印出與AAA =相同的x = b; x.n(); 「BBB」;
但是如果我創建了一個實例A,其中'a'是引用並且說b = a;它說錯誤。找到一個必需的B.
那麼我認爲'b'的引用被引用'a'覆蓋,如果我現在調用b.m();它給了我「AAA」,因爲它現在指向A的實例。雖然a = b;用a.m()打印「BBB」
爲什麼?
實例的超類的不一定是子類的實例... –