2016-03-14 166 views
-2
class Parent{} 

class Child extends Parent{ 

    public void display(){ 
     System.out.println("Anything"); 
    } 
} 

Class Main{ 
    public static void main(String[] args){ 
     Parent obj = new Child(); 
     obj.display(); //error No function in Parent Class  
    } 
} 

爲什麼我們不能這樣做? obj有一個Child類型的對象,但仍然無法訪問顯示函數?Java多態性錯誤

回答

1

當你這樣做:

Parent obj = new Child(); 

您正在創建Parent類型的變量。您可以將new Child()指向obj,因爲ChildParent的子類。

由於obj被聲明爲Parent,因此它只能訪問Parent的屬性和方法。


,使其能夠訪問方法和Child屬性,你可以將它轉換:

((Child)obj).display(); 

鑄造它作爲Child就像是告訴Java來從現在開始治療obj作爲Child

0

你不能這樣做,因爲父類沒有方法顯示,就這麼簡單的是,如果你要調用的方法,那麼你必須做一些所謂的鑄造

即投父到子

((Child)obj).display(); 

PS:想重命名類,以便他們制定簡單的人字繼承時更有意義......

+0

你爲什麼推薦鑄造,而不是改變obj'的'類型'Child' ? –

+2

這是一個關於多態性的問題。也許可能有其他代碼段,其中'obj = new Other();'其中Other也是Parent的子類。或者可能是一個'Parent obj [] = ...'數組,並且該數組將被填充各種子類。所以有合理的情況下演員是正確的選擇。 – FredK

+0

我明白了!我錯了,因爲Object(Parent)和reference(Child)是不同的,所以Object只能訪問它自己的方法或覆蓋方法!至少在法律上是不能做到的! –