《java编程思想》学习笔记——复用类
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
1、復(fù)用類的兩種方法
(1)只需在新的類中產(chǎn)生現(xiàn)有類的對象。由于新的類是由現(xiàn)有類的對象所組成,所以這種方法稱為組合。該方法只是復(fù)用了現(xiàn)有程序代碼的功能,而非它的形式。
(2)第二種方法則更細致一些,它按照現(xiàn)有類的類型來創(chuàng)建新類。無需改變現(xiàn)有類的形式,采用現(xiàn)有類的形式并在其中添加新代碼。
7.1組合語法
1、組合技術(shù):只需將對象引用置于新類中即可。對于非基本類型的對象,必須將其引用置于新的類中,但可以直接定義基本類型數(shù)據(jù)。
2、每一個非基本類型的對象都有一個toString()方法,而且當編譯器需要一個String而你只有一個對象時,該方法便會被調(diào)用,可以重寫toString()。
3、如果想初始化引用,可以在代碼中的下列位置進行
(1)在定義對象的地方。這意味著它們總是能在構(gòu)造被調(diào)用之前被初始化。
(2)在類的構(gòu)造器中。
(3)就在正要使用這些對象之前,這種方式為惰性初始化。
(4)使用實例化初始化。
7.2繼承語法
1、除非已明確指出要從其他類中繼承,否則就是隱式地從java的標準根類Object進行繼承。
2、即使是一個程序中含有多個類,也只有命令行所調(diào)用的那個類的mian()方法會被調(diào)用。即使不是public類,也可以執(zhí)行里面的面方法。
3、為了繼承,一般的規(guī)則是將所有的數(shù)據(jù)成員都指定為private,將所有的方法指定為public。
4、在子類的方法中,不能直接調(diào)用基類繼承而來的方法,因為這樣做會產(chǎn)生遞歸,為解決此問題,java用super關(guān)鍵字表示超類的意思,當前類就是從超類繼承來得。
7.2.1初始化基類
1、當創(chuàng)建一個到處類的對象時,該對象包含了一個基類的子對象。這個子對象與你用基類直接創(chuàng)建的對象是一樣的。二者的區(qū)別在于,后者來自外部,而基類的子對象被包裝在導(dǎo)出類對象內(nèi)部。
2、對基類子對象初始化:在構(gòu)造器中調(diào)用基類構(gòu)造器來執(zhí)行初始化,而基類構(gòu)造器具有執(zhí)行基類初始化所需要的所有知識和能力。java會自動在到處類的構(gòu)造器中插入基類構(gòu)造器的調(diào)用。
3、構(gòu)建過程是從基類“向外”擴散的,所以基類再導(dǎo)出類構(gòu)造器可以訪問它之前,就已經(jīng)完成了初始化。
4、如果沒有默認的基類構(gòu)造器,或者想調(diào)用一個帶參數(shù)的基類構(gòu)造器,就必須用關(guān)鍵字super顯示地編寫調(diào)用基類構(gòu)造器的語句,并且配以適當?shù)膮?shù)列表。
5抵用基類構(gòu)造器必須是你在導(dǎo)出類構(gòu)造器中要做的第一件事。
7.3代理
1、這是繼承和組合之間的中庸之道,因為我們將一個成員對象置于所要構(gòu)造的類中(就像組合),但與此同時我們在心累中暴露了該成員對象的所有方法(就像繼承)
2、我們使用代理擁有更多的控制力,因為我們可以選擇只提供在成員對象中的方法的某個子集。
7.4結(jié)合使用組合和繼承
1、雖然編譯器強制你去初始化基類,并且要求你在構(gòu)造器起始處就要這么做,但是它并不監(jiān)督你必須將成員對象也初始化,因此在這一點上必須時刻注意。
7.4.1確保正確清理
1、執(zhí)行類的所有特定的清理動作,其順序同生成順序想法
7.4.2名稱屏蔽
1、當想要覆寫某個方法時,可以選擇加@Override注解,在你不留心重載而并非覆寫了該方法時,編譯器就會生成一條錯誤信息。
7.5在組合和繼承之間選擇
1、組合技術(shù)通常用于想在新類中使用現(xiàn)有類的功能而非它的接口這種情形。
2、在繼承的時候,使用現(xiàn)有類。這意味著你再使用一個通用類,并為了某種特殊需要而將其特殊化。
7.6protected關(guān)鍵字
1、監(jiān)管可以創(chuàng)建protected域,但是最好的方式還是將域保持為private,你應(yīng)當一直保留“更改底層實現(xiàn)”的權(quán)利然后通過protected方法來控制類的繼承者的訪問權(quán)限。
7.7向上轉(zhuǎn)型
7.7.1為什么稱為向上轉(zhuǎn)型
1、導(dǎo)出類是基類的一個超集。它可能比基類含有更多的方法,但他必須至少具備基類中所含有的方法。
7.7.2再論組合與集成
1、如果必須向上轉(zhuǎn)型,則繼承是必要的。
7.8final關(guān)鍵字
7.8.1final數(shù)據(jù)
1、有時數(shù)據(jù)的恒定不變是很有用的
(1)一個永不改變的編譯時常量
(2)一個在運行時被初始化的值,而你不希望它被改變
2、一個既是static又是final域只占據(jù)一段不能改變的存儲空間(編譯期常量)。
3、對于基本類型,final使數(shù)值恒定不變,而用于對象引用,final使引用恒定不變。
4、既是static又是final的域,將用大寫表示,并使用下劃線分割各個單詞。
5、不能因為某數(shù)據(jù)是final的就認為在編譯時可以知道它的值。因為它可以在運行時再賦值。
6、將final數(shù)值定義為靜態(tài)和非靜態(tài)的區(qū)別:此區(qū)別只有當數(shù)值在運行時內(nèi)被初始化才顯現(xiàn),這是因為編譯器對編譯時數(shù)值一視同仁。
7、final參數(shù):指明為final的參數(shù),可以讀參數(shù),單不能修改參數(shù)。
7.8.2final方法
1、使用原因
(1)把方法鎖定,以防任何繼承類修改它的含義。
(2)過去建議使用final方法是因為效率(現(xiàn)在不存在了)
2、當基類的某方法為private時,再寫一個同名方法,此時并沒有覆蓋該方法,僅是生成了一個新的方法。
7.8.3final類
1、由于final類禁止繼承,所以final類中的所有的方法都隱式指定為final。
7.9初始化及類的加載
1、加載順序:先基類的static,再子類的static。
2、創(chuàng)建順序:先子類的構(gòu)造器,再基類的構(gòu)造器。
轉(zhuǎn)載于:https://my.oschina.net/u/2427561/blog/1558982
總結(jié)
以上是生活随笔為你收集整理的《java编程思想》学习笔记——复用类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一步将 p12转为pem
- 下一篇: cookie的简单学习