如果某個類沒有提供任何構造函數,編譯器將提供一個默認構造函數,該構造函數又調用超類的無參數。爲什麼要調用超類的無參數構造函數?調用超類的參數構造函數
0
A
回答
4
要初始化超(繼承)該類別的一部分
2
這樣就可以初始化超類的屬性,以及。
1
是否有意義的對象的構造函數只有部分構造對象?
0
它是子類實例與其超類的「is-a」關係的一部分。如果SpottedFoo
是Foo
的子類(例如,每個SpottedFoo
「是-a」Foo
),則應當調用Foo
構造函數。
否則,如果由Foo
構造函數執行的初始化(私有或不是)被跳過,那麼SpottedFoo
不能保證它可以像Foo
那樣操作。
這是實現繼承協議的一部分:每個子類實例必須能夠像其超類的任何其他成員一樣行事。這是Liskov substitution principle.
相關問題
- 1. Scala:調用超類的構造函數
- 2. C++調用具有計算參數的超類構造函數
- 3. 調用多個超類構造函數
- 4. 無參數構造函數調用2參數構造函數
- 5. Java:如何調用子類構造函數內的超類構造函數?
- 6. 構造函數調用具有參數的構造函數
- 7. 參數類構造函數
- 8. 在調用超類的構造函數之前解析子類中的參數
- 9. 從參數化構造函數調用默認構造函數
- 10. 從C#中的參數化構造函數調用無參數構造函數?
- 11. 使用Closure作爲超類構造函數的參數
- 12. 使用超類的構造函數?
- 13. 從不同類的構造函數調用構造函數
- 14. Java構造函數超級參數
- 15. 反思 - 調用構造函數參數
- 16. 超類的Java子類構造函數
- 17. Python調用超級構造函數
- 18. 在C調用超級構造函數#
- 19. 調用超類構造函數的子類方法
- 20. 調用超類構造函數的子類方法
- 21. 子類調用超類的構造函數
- 22. 在父構造函數之前調用子類構造函數
- 23. Move構造函數調用基類移動構造函數
- 24. 沒有參數的構造函數或參數構造函數
- 25. 如何攔截超類的構造函數參數?
- 26. 使用反射覆蓋超類構造函數與基類構造函數
- 27. 獲取類的構造函數參數
- 28. 問題在子類構造函數中調用超類方法
- 29. C++:調用基類的構造函數與計算參數
- 30. 匿名類的構造函數調用可以有參數
你的第一句話並不完全準確。編譯器將只**提供一個默認的無參數構造函數**如果你自己沒有提供任何構造函數**。只要添加構造函數,無論它接受多少個參數,默認的no-arguments構造函數都不會由編譯器生成。 – ivantod 2011-12-20 18:00:23
@ivantod我同意你的意見....我已經糾正了它.. – Rekha 2011-12-20 18:01:42
也爲了安全,如果超級類沒有沒有參數構造函數呢? – Stefan 2011-12-20 18:51:34