更新時(shí)間:2020-03-19 10:07:10 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2212次
1.繼承
1.1繼承帶來的問題
子類可以通過繼承獲取到父類中非私有化方法,但是父類的方法,不一定滿足子類的情況。
這里不可能通過重新定義類似的方法名,完成子類特定的符合要求的方法。
1.2方法的重寫
解決的問題就是在開發(fā)中,父類的方法不適用于子類情況,子類可以重寫父類的方法,完成自定義的方法使用
重寫之后,在沒有增加新的方法名的情況下,重寫方法體內(nèi)容,讓方法滿足子類,降低了開發(fā)壓力,提高了效率。
@Override
嚴(yán)格格式檢查
要求重寫方法的和父類中的方法,聲明完成一致,返回值類型,方法名和形式參數(shù)列表
1.3重寫和繼承帶來的問題
子類繼承父類可以直接使用父類的方法,但是在這種情況下我們可以發(fā)現(xiàn)父類的方法是一定不能在子類中使用的,但是又沒有一個(gè)強(qiáng)制要求。
需求:
強(qiáng)制要求子類重寫父類的方法,從語法角度約束
1.4abstract關(guān)鍵字
abstract修飾的方法
要求子類強(qiáng)制重寫!!!
讓Eclipse幫著我們寫代碼
第一個(gè)錯(cuò)誤:
Abstractmethodsdonotspecifyabody
abstract修飾的方法是沒有方法體
快速修復(fù)提示:
Removemethodbody
刪除方法體
第二個(gè)錯(cuò)誤:
TheabstractmethodQintypeLOLHerocanonlybedefinedbyanabstractclass
在LOLHero中使用abstract修飾的方法Q,只能定義在abstract修飾的類內(nèi)快速修復(fù)提示:
MakeType'LOLHero'abstract
第三個(gè)錯(cuò)誤:
ThetypeYasuomustimplementtheinheritedabstractmethodLOLHero.Q()
子類亞索類必須實(shí)現(xiàn)繼承而來的abstract方法LOLHero.Q()快速修復(fù)提示:
Addunimplementedmethods
添加沒有實(shí)現(xiàn)的父類中abstract方法
abstract使用總結(jié):
1.abstract修飾的方法沒有方法體
2.abstract修飾的方法必須定義在abstract修飾的類內(nèi)或者interface接口內(nèi)
3.一個(gè)普通類【非abstract】修飾的類,繼承了一個(gè)abstract類,那么必須實(shí)現(xiàn)在abstract類內(nèi)的所有abstract,強(qiáng)制要求
4.如果一個(gè)abstractA類繼承另一個(gè)abstractB類,A類可以選擇實(shí)現(xiàn)B類中abstract方法。
5.abstract修飾的類內(nèi)允許普通方法
6.abstract修飾的類不能創(chuàng)建自己的類對(duì)象!!!
【原因】
abstract修飾的類內(nèi)有可能存在abstract修飾的方法,而abstract修飾的方
法是么有方法體的,如果說創(chuàng)建了abstract修飾類對(duì)應(yīng)的對(duì)象,不能執(zhí)行沒
有方法體的abstract方法
7.一個(gè)類內(nèi)沒有abstract修飾的方法,那么這個(gè)類定義成abstract類有意義嗎?
沒有必要的!!!無意義的!!!
2.final關(guān)鍵字
最后的,最終的
final修飾的成員變量
final修飾的成員變量定義時(shí)必須初始化,并且賦值之后無法修改,一般用于類內(nèi)帶有名字的常量使用
final修飾的成員方法
final修飾的成員變量不能被子類重寫,為最終方法,可以用于一些安全性方法的定義
final修飾的局部變量
final修飾的局部變量一旦被賦值,不能修改!
final修飾的類
final修飾的類沒有子類,不能被繼承。
abstract修飾的類不能被final修飾。
3.static關(guān)鍵字【重點(diǎn)】
3.1static修飾成員變量
3.1.1static修飾成員變量的需求
3.1.2生活中的例子進(jìn)一步理解
共享自行車
1.是存在于公共區(qū)域的
2.每一個(gè)人都可以使用
3.來到北京之前,北京已經(jīng)有共享單車,你離開北京之后,共享單車依然存在。
4.如果共享單車損壞了。所有需要使用的人都會(huì)受到影響。
總結(jié):
1.公共區(qū)域存放
2.共享性使用
3.和對(duì)象無關(guān)
4.一處修改,處處受到影響。
3.1.3靜態(tài)成員變量使用注意事項(xiàng)
1.靜態(tài)成員變量是使用static修飾的成員變量,定義在內(nèi)存的【數(shù)據(jù)區(qū)】
2.靜態(tài)成員變量不推薦使用類對(duì)象調(diào)用,會(huì)提示警告
ThestaticfieldSingleDog.infoshouldbeaccessedinastaticway
使用static修飾的SingleDog類內(nèi)的info成員變量,應(yīng)該通過靜態(tài)方式訪問
3.靜態(tài)成員變量使用類名調(diào)用是沒有任何的問題。【墻裂推薦方式】
4.在代碼中沒有創(chuàng)建對(duì)象時(shí),可以通過類名直接使用靜態(tài)成員變量,和【對(duì)象無關(guān)】
5.代碼中對(duì)象已經(jīng)被JVM的GC銷毀時(shí),依然可以通過類名調(diào)用靜態(tài)成員變量,和【對(duì)象無關(guān)】
6.不管通過哪一種方式調(diào)用靜態(tài)成員變量,修改對(duì)應(yīng)的靜態(tài)成員變量數(shù)據(jù),所有使用到當(dāng)前靜態(tài)成員變量的位置,都會(huì)受到影響。
3.1.4為什么靜態(tài)成員變量和對(duì)象無關(guān)
1.從內(nèi)存角度出發(fā)分析
靜態(tài)成員變量是保存在內(nèi)存的數(shù)據(jù)區(qū)
類對(duì)象占用的實(shí)際內(nèi)存空間是在內(nèi)存的堆區(qū)
這兩個(gè)區(qū)域是完全不同的,所有可以說靜態(tài)成員變量和對(duì)象沒有關(guān)系【沒有對(duì)象】
2.從靜態(tài)成員變量以及類對(duì)象生命周期來分析
靜態(tài)成員變量是隨著類文件(.class)字節(jié)碼文件的加載過程中,直接定義在內(nèi)存的數(shù)據(jù)區(qū)。靜態(tài)成員變量從程序運(yùn)行開始就已經(jīng)存在。
類對(duì)象是在代碼的運(yùn)行過程中,有可能被創(chuàng)建的。程序的運(yùn)行過中,有可能會(huì)被JVM的CG垃圾回收機(jī)制銷毀,程序在退出之前一定會(huì)銷毀掉當(dāng)前Java程序使用到的所有內(nèi)存。
靜態(tài)成員變量在程序退出之后,才會(huì)銷毀
靜態(tài)成員變量的生命周期是從程序開始,到程序結(jié)束
類對(duì)象只是從創(chuàng)建開始,而且隨時(shí)有可能被JVM的GC銷毀
生命周期不在同一個(gè)時(shí)間線上,所以靜態(tài)成員變量和類對(duì)象無關(guān),【沒有對(duì)象】
3.2static修飾成員方法
3.2.1靜態(tài)成員方法的格式
異常熟悉的格式
publicstatic返回值類型方法名(形式參數(shù)列表){
}
3.2.2靜態(tài)成員方法注意事項(xiàng)
1.靜態(tài)成員方法推薦使用靜態(tài)方式調(diào)用,通過類名調(diào)用【墻裂推薦的】
不推薦使用類對(duì)象調(diào)用,因?yàn)椤緵]有對(duì)象】
2.靜態(tài)成員方法中不能使用非靜態(tài)成員==>(非靜態(tài)成員方法和非靜態(tài)成員變量)
因?yàn)椤緵]有對(duì)象】
3.靜態(tài)成員方法中不能使用this關(guān)鍵字
因?yàn)椤緵]有對(duì)象】
4.靜態(tài)成員方法中可以使用類內(nèi)的其他靜態(tài)成員【難兄難弟】
5.靜態(tài)成員方法中可以通過new構(gòu)造方法創(chuàng)建對(duì)象
單身狗可以找對(duì)象
不能挖墻腳但是能自己找
3.2.3靜態(tài)成員方法特征解釋
1.靜態(tài)成員方法加載時(shí)間問題
靜態(tài)成員方法是隨著.class字節(jié)碼文件的加載而直接定義在內(nèi)存的【方法區(qū)】,而且此時(shí)的靜態(tài)成員方法已經(jīng)可以直接運(yùn)行。可以通過類名直接調(diào)用,而此時(shí)沒有對(duì)象存在。【沒有對(duì)象】
2.為什么靜態(tài)成員方法不能使用非靜態(tài)成員
非靜態(tài)成員變量和非靜態(tài)成員方法時(shí)需要類對(duì)象調(diào)用的,在靜態(tài)成員方法中,是可以通過類名直接執(zhí)行的,而此時(shí)是【沒有對(duì)象】的。
3.為什么靜態(tài)成員方法不能使用this關(guān)鍵字
this關(guān)鍵字表示的是調(diào)用當(dāng)前方法的類對(duì)象,但是靜態(tài)成員方法可以通過類名調(diào)用,this不能代表類名,同時(shí)也是【沒有對(duì)象】
4.靜態(tài)成員方法可以使用其他靜態(tài)成員
生命周期一致,調(diào)用方式一致
3.3類變量和類方法
類變量==>靜態(tài)成員變量
類方法==>靜態(tài)成員方法
類成員==>靜態(tài)成員變量和靜態(tài)成員方法
面試題
類方法中是否可以使用成員變量?
類方法可以使用當(dāng)前類內(nèi)的靜態(tài)成員變量,但是不允許使用非靜態(tài)成員變量
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“動(dòng)力節(jié)點(diǎn)java全套視頻面向?qū)ο笕筇卣鳌钡膬?nèi)容,希望對(duì)大家有幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743