2017-04-08 144 views
-2

爲什麼子類的引用變量不能指向父對象?即爲什麼我不能將父類分配給子類類型的變量?

Child obj = new Parent(); 

但是我們可以做的,反之亦然 請與存儲視圖(堆)

+0

這與記憶無關。 –

+2

對象類型之間存在層次關係。每個「狗」都是「動物」,但並非每個「動物」都是「狗」。 –

回答

1

沒有理由它有事情做與內存回答。它更簡單。子類可以通過添加新方法來擴展其超類的行爲。雖然沒有給出,但超類擁有其子類的所有方法。看看下面的例子:

public class Parent { 
    public void parentMethod() {} 
} 

public class Child extends Parent { 
    public void childMethod() {} 
} 

現在讓我們想想,如果你可以的Parent一個實例分配給Child類型的變量會發生什麼。

Child c = new Parent(); //compiler error 

c由於是Child類型的,它允許調用方法childMethod()。但由於它實際上是一個Parent實例,它沒有此方法,所以這會導致編譯器或運行時問題(取決於檢查何時完成)。

另一種方式是沒有問題的,因爲你不能通過擴展一個類刪除方法。

Parent p = new Child(); //allowed 

ChildParent一個子類,因此繼承了parentMethod()。所以你可以保存地調用這個方法。

+0

謝謝SilverNak^_ ^ –

相關問題