2013-07-19 35 views
0

根據我的理解,當我們將子對象轉換爲父類的引用時,子對象失去了與子類有關的特定屬性。但是,它仍然識別重寫的方法和變量。從子類中被重載的變量和方法被訪問時的區別

我的問題是爲什麼輸出結果顯示來自子類的情況下,如果重載變量的情況下父子類過度騎法和結果。爲什麼這種方法和變量之間的行爲差​​異

class A 
{ 
    int a = 2; 
    public void show() 
    { 
     System.out.println("Inside A"); 
    } 
} 
class B extends A 
{ 
    int a = 555; 
    void show() 
    { 
     System.out.println("Inside B"); 
    } 
} 

class Demo 
{ 
    public static void main(String[] args) 
    { 
     A obj = new B(); 
     System.out.println(obj.a); // prints 2. 
     obj.show(); // prints Inside B 
    } 
} 
+0

你怎麼樣能夠訪問變量'A'在線路'的System.out.println(一);' ? – midhunhk

回答

0

重寫適用於方法,而不是場引入其他領域。超類字段在子類hides中具有相同的字段。

由於obj類型是A,其在A intialized實際值a獲取打印

+0

謝謝。現在一切都說得通了 !! – Malwaregeek

1

因爲你的理解是錯誤的。 Java對象的行爲與真實對象非常相似。僅僅因爲你將孩子稱爲人類並不會改變孩子如何移動,哭泣和玩耍。它仍然是一個孩子。

這就是多態性的要點:您可以在不知道其具體類型的情況下引用對象,並且其行爲將在其具體類型定義中定義。

請注意,多態性和覆蓋僅適用於方法,而不適用於字段。字段永遠不會以多態的方式解決。反正他們不應該直接從外面訪問:總是通過方法。這是面向對象的另一個主要原則:封裝。

在B,你不覆蓋領域,但具有相同的名字,隱藏在A.定義的一個

相關問題