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