Java学习记录-3.类的复用
對類的復用主要有兩種方式,組合與繼承。
組合
在一個類中使用一個類。
對于這些對象的初始化有四種方式:
1.在定義域處,這樣在構造器被調用之前就會被初始化。
2.在構造器內。
3.惰性初始化,既在使用這些對象的時候初始化。
4.實例初始化。
繼承
Java中任何一個對象都存在繼承關系,哪怕沒有指明繼承的類,也會隱式地從標準根類Object進行繼承。對于訪問權限,即便是繼承而來的子類,也需嚴格遵守規則,無法訪問基類的private成員,包外也無法訪問friendly成員。但如果必須要調用基類的private實例域,也可以定義一個get方法。子類的方法來自對基類的繼承,對基類方法的覆蓋和額外添加新方法。若要在子類中調用基類版本的方法,只需寫為super.MethodName。
對于構造器,無參數的積累構造器是自動調用的,無需手動調用,而若要指定某個有參數的構造器,則需使用super方法,例如,在子類中調用super(i)則會調用基類中有一個參數的構造器。需要注意的事,在子類構造器中指明使用的積累構造器是很重要的,要在第一時間內寫出。
對于重載方法,只要簽名不同,在子類中重載方法就不會覆蓋基類的方法,可以在子類中調用包括基類和子類在內的所有重載版本。
對繼承的初始化是由基類像子類逐層進行的。
代理
在其他類中將該類作為成員對象(就像組合),在創建方法的時候有選擇的將該類的方法包含其中,使得新的類擁有該類的接口(就像繼承)。
在組合與繼承之間選擇
組合意味著設計者想要使用它的一些個方法,這些組合類應該使用private修飾,但當組合類自身的的具體實現都隱藏了的時候,使用public也無妨,并且可以更好的展示這個類的組合情況,如engine類有一個start()方法,而car類則組合了engine類,則可以在car類內創建一個實例engine1,在擁有一個car類的實例car1時通過car1.engine1.start()來調用。
繼承則意味著想要將一個通用類特殊化,例如車類繼承自交通工具類,而不是車類組合了一個交通工具類。
更多應用
同時調用組合與繼承也是一種非常常用的方法。
思想
高層對象不應該依賴于低層對象,它們都應該依賴于抽象;抽象不應該依賴于細節,細節應該依賴于抽象。
轉載于:https://www.cnblogs.com/liuzey/p/8796281.html
總結
以上是生活随笔為你收集整理的Java学习记录-3.类的复用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十个你需要在 PHP 7 中避免的坑
- 下一篇: 【Java集合源码剖析】TreeMap源