類中域?yàn)榛绢愋蜁r(shí)能夠自動(dòng)被初始化為0刨秆,對(duì)象初始化為null.
編譯器并不簡(jiǎn)單的為每個(gè)引用創(chuàng)建對(duì)象。如果想要初始化這些引用堕仔,可以在代碼中的下列位置進(jìn)行:
1.在定義對(duì)象的地方铃彰,這意味著他們總是能夠在構(gòu)造器被調(diào)用之前被初始化蜗巧。
2.在類的構(gòu)造器中
3.在使用對(duì)象之前初始化。
為了繼承奏赘,一般的規(guī)則是將所有的數(shù)據(jù)成員指定為private,所有的方法指定為public
有時(shí)在繼承中為了使用超類的方法而直接使用方法名會(huì)導(dǎo)致無限遞歸寥闪,應(yīng)該使用super關(guān)鍵字。
Java會(huì)自動(dòng)在導(dǎo)出類的構(gòu)造器中插入對(duì)基類構(gòu)造器的調(diào)用磨淌,基類的子對(duì)象被包裝在導(dǎo)出類的對(duì)象內(nèi)部
如果沒有默認(rèn)的構(gòu)造器疲憋,或者想使用一個(gè)帶參數(shù)的基類構(gòu)造器,就必須使用super關(guān)鍵字顯示的編寫調(diào)用基類構(gòu)造器的語句梁只。
代理的使用缚柳。將對(duì)象申明為private,嵌入到類中,在類外實(shí)現(xiàn)了隱藏搪锣。
如果在java的基類中擁有某個(gè)已被多次重載的方法名稱喂击,那么在導(dǎo)出類重新定義該方法名稱并不會(huì)屏蔽在基類中的任意版本。當(dāng)你想覆蓋基類中的方法時(shí)淤翔,會(huì)有override注解提示。
protected關(guān)鍵字佩谷,能夠使我們?cè)L問繼承于它的類訪問該關(guān)鍵字修飾的方法旁壮,即使即使是在包外。再同一個(gè)包內(nèi)當(dāng)然可以訪問谐檀。
繼承與組合:
如果必須向上轉(zhuǎn)型抡谐,那么繼承是必須的,如果不需要桐猬,那么考慮是否需要繼承麦撵。
Final關(guān)鍵字
final數(shù)據(jù):
1.一個(gè)永不改變的編譯時(shí)常量
2.一個(gè)在運(yùn)行時(shí)被初始化,而你不希望它改變
3.final使引用恒定不變溃肪,一旦引用被初始為指向一個(gè)對(duì)象免胃,就無法再把它改為指向另一個(gè)對(duì)象。
我們不能認(rèn)為某數(shù)據(jù)是final就認(rèn)為在編譯時(shí)就可以知道他的值惫撰,在運(yùn)行時(shí)使用隨機(jī)申明的數(shù)說明了這一點(diǎn)
使引用申明為final沒有基本類型申明為final用處大
Java允許使用空白final羔沙,但是編譯器會(huì)確保在使用前必須初始化。它可以為一個(gè)類中的final對(duì)象根據(jù)對(duì)象選擇不同而設(shè)置不同的初值厨钻。
使用空白final扼雏,必須在域的定義處或者每個(gè)構(gòu)造器中用表達(dá)式對(duì)final賦值坚嗜。
final參數(shù)
你可以讀他們,但不能修改他們J洹2允摺!
final方法
原因:方法鎖定蝴蜓,不想被繼承碟绑。
類中的所有private方法都是隱含的申明為final的,所以在繼承的時(shí)候励翼,你無法覆蓋它蜈敢。
覆蓋只有在某方法是基類的接口的一部分時(shí)才會(huì)出現(xiàn),如果某方法為private它就不是基類的接口的一部分汽抚,它僅僅是隱藏在類中的程序代碼抓狭。
但如果在導(dǎo)出類中以相同的名稱生成一個(gè)public,protected或default方法造烁,此時(shí)你并沒有覆蓋該方法否过,而是生成了一個(gè)新方法。
final類
當(dāng)你將整個(gè)類定義為final時(shí)惭蟋,表明你不打算讓別人繼承這個(gè)類苗桂。
類是在其如何static關(guān)鍵字被訪問時(shí),加載告组。構(gòu)造器也是static方法煤伟。