Temp1 t1=new Temp2();
這裏Temp1是Temp2的超類。代碼工作得很好,並且t1做爲Temp1的參考變量,但Temp2()如何作爲Temp1的構造函數?創建對象時的尷尬
Q
創建對象時的尷尬
0
A
回答
2
這是polymorphism的基礎:假設您有幾個繼承自父類的子類。您希望通過父類上定義的接口/方法來使用所有這些子類,而不必擔心每個子類中的實現細節(每個類可能會做不同的事情,但具有相同的整體語義)。
這是可能的,因爲子類從父類繼承,因此子類與其父類具有IS A關係。
0
但Temp2()如何作爲Temp1的構造函數?
它沒有。這是另一種方式。它是作爲參考的Temp1 t1
,其可以容納任何種類的對象形式Tempt1
系列,並且因爲Temp2 extends Temp1
它被認爲是Type1
的類型。
這是完全安全的,因爲Type2
繼承了Type1
所有成員,所以沒有一些方法或字段上調用t1
參考將嘗試執行/使用一些未定義的方法/變量的風險。
同樣由於多態性(或更精確地late-binding - 檢索以及基於實例類型的運行時方法的執行代碼時,不引用類型)的Type2
方法將被調用,而不是Type1
。這使我們可以擁有抽象類和接口。
0
T1 do act as reference variable for Temp1
不,實際上T1變量是類型TEMP1的充當參考變量爲TEMP2。
but how can Temp2() works as constructor for Temp1
繼承是面向對象的特性由子類繼承父類的所有屬性,在這種情況下TEMP2是繼承自其超temp1中所有方法子類。因此temp2是一種temp1系列,因此Temp2構造函數可以通過Temp1引用變量(t1)引用。
您必須閱讀:https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html
相關問題
- 1. 尷尬形象 - java的
- 2. 尷尬arc4random結果
- 3. 尷尬的Java日期創作行爲
- 4. 尷尬的水平中心對齊
- 5. Android的尷尬行爲
- 6. ruby中的三重尷尬
- 7. 尷尬的繼承問題
- 8. Rails中的Omniauth/MYSQL尷尬
- 9. 檢查尷尬的陣列
- 10. 尷尬的命名約定
- 11. 尷尬的數據結構
- 12. 尷尬的LINQ排序
- 13. 對齊尷尬情節和軸標題
- 14. 添加到JS對象在尷尬的地方
- 15. 尷尬轉義字符
- 16. Rails視圖行爲尷尬
- 17. 尷尬VAR-args參數
- 18. PHP尷尬函數聲明
- 19. 尷尬的差距使用的box-shadow
- 20. 尷尬的DLL導出部分
- 21. 尷尬簡單的bash腳本幫助
- 22. 查詢尷尬存儲的數據
- 23. 肖像中的尷尬景觀鍵盤?
- 24. 尷尬的主機名入門程序
- 25. 尷尬:組合兩個awk的語句
- 26. PHP目錄路徑姿態的尷尬
- 27. bash腳本與pwd的尷尬
- 28. 圖像視圖導致尷尬坑?
- 29. 如何解決這個onclick尷尬?
- 30. jQuery ajax請求尷尬問題
你混淆的對象,變量和引用。 (和類型繼承。) –
https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html – BoDidely
t1在這種情況下在運行時是Temp2類型,而不是Temp1 – BoDidely