? ? ? ? 明白了在java中,什么是類,什么是訪問修飾符公你。訪問修飾符比如private? 是在本類中,在同一個(gè)包中甚牲,在子類中不可以訪問default在類內(nèi)部,同一個(gè)包中蝶柿,可以訪問丈钙,在子類中不可以,protected在類內(nèi)部交汤、同一個(gè)包中著恩、子類可以訪問,public在類內(nèi)部蜻展、同一個(gè)包中喉誊、子類中、任何地方都可以訪問纵顾。
對(duì)于外部class的權(quán)限修飾符只可以用public和default
public類可以在任意地方被訪問伍茄。default類只可以被同一個(gè)包內(nèi)部的類訪問。
訪問修飾符就是規(guī)定了施逾。其他類是不是有訪問權(quán)限敷矫。
? ? ? 還知道了什么是變量例获。比如。String? io=“111”曹仗。這是聲明一個(gè)局部變量榨汤,存在于棧中。把111賦值給io這個(gè)變量在內(nèi)存中開辟的一塊小的儲(chǔ)存空間怎茫。
? ? ? ? 知道了面向?qū)ο笾械睦^承收壕,多態(tài)。
繼承的關(guān)鍵字是? “extends”? 轨蛤,即子類不是父類的子集蜜宪,而是對(duì)父類的“擴(kuò)展”。
繼承屬性方面
1.子類會(huì)全部繼承父類的屬性祥山,但是因?yàn)樵L問修飾符的原因圃验,可能不能直接訪問,如果不能直接訪問的缝呕,那么需要通過set/get方法來操作父類的屬性澳窑。
2.子類繼承父類后,若子類出站與父類中同名的屬性時(shí)供常,在子類中需要操作/訪問父類的屬性時(shí)摊聋,需要使用關(guān)鍵字super區(qū)別
? ? ? ? ? ? ? super.父類的屬性
補(bǔ)充:局部變量與成員變量(屬性)重名時(shí),需要通過this.區(qū)分话侧。
方法
1.可以原樣繼承父類的方法
2.當(dāng)子類的方法實(shí)現(xiàn)需要與父類不相同時(shí),子類需要對(duì)方法重寫實(shí)現(xiàn)
方法的重寫(Overload):當(dāng)父類中的方法對(duì)于子類來說不適用時(shí)闯参,子類可以對(duì)父類中的方法進(jìn)行重寫/覆寫瞻鹏。
要求:
? ? 重寫的方法,必須與被重寫的方法鹿寨,名稱要完全一致新博,參數(shù)列表必須完全一致
對(duì)于返回值的類型、修飾符脚草、拋出的異常有哪些限制赫悄?
返回值類型:重寫的方法要么與被重寫的方法一樣,要么比被重寫的方法返回值類型小(繼承關(guān)系馏慨,不是int<long這種埂淮,即意味著基本數(shù)據(jù)類型的返回值類型必須一致。
修飾符:重寫的方法要么與被重寫的方法一樣写隶,要么比被重寫的方法的訪問修飾符的范圍大(public>protected>缺省>private)
? 結(jié)果:當(dāng)子類重寫了父類的方法時(shí)倔撞,通過子類對(duì)象調(diào)用重寫的方法,執(zhí)行的一定是重寫過的代碼慕趴。
3.當(dāng)子類重寫父類的方法痪蝇,那么在子類中想要執(zhí)行父類被重寫的代碼時(shí)要怎么做鄙陡??
答:super.父類的方法躏啰。
4.重寫的概念不適用于static方法趁矾。
總結(jié):重載(Overload)和重寫(Override)有什么區(qū)別。
1.重載是在同一個(gè)類中给僵,重寫是子類與父類中
2.重載與重寫都要求方法的名稱完全一致
3.重載要求參數(shù)列表必須不同毫捣,重寫要求參數(shù)列表必須相同
4.重載和返回值類型無關(guān),重寫有很嚴(yán)格的要求
構(gòu)造器
1.子類繼承父類的構(gòu)造器時(shí)想际,不會(huì)繼承父類的構(gòu)造器
2.但是培漏,子類中一定會(huì)去調(diào)用父類的構(gòu)造器,默認(rèn)情況下是調(diào)用父類的無參構(gòu)造胡本,如果父類中沒有無參構(gòu)造牌柄,那么子類必須手動(dòng)調(diào)用有參構(gòu)造,否則編譯報(bào)錯(cuò)侧甫。
提示:父類盡量保留無參構(gòu)造
3.如何調(diào)用父類的構(gòu)造器
super()珊佣;調(diào)用父類的空參構(gòu)造
suoer(實(shí)參列表);調(diào)用父類的有參構(gòu)造披粟,為父類的屬性初始化
注意:必須在構(gòu)造方法中的首行咒锻。在構(gòu)造方法中this()和super()只能選一個(gè)。
提問:為什么要去調(diào)用父類的構(gòu)造器守屉?
初衷:為了給從父類繼承的屬性初始化惑艇,子類需要知道父類是如何給屬性初始化的
super關(guān)鍵字
在java類中使用super來調(diào)用父類中的指定操作:
1.super可用于訪問父類中定義的非私有的屬性
2.super可用于調(diào)用父類中定義的非私有的成員方法
3.super可用于在子類構(gòu)造方法中調(diào)用父類的非私有的構(gòu)造器
注意:尤其當(dāng)子類父類出現(xiàn)同名成員時(shí),可以用super進(jìn)行區(qū)分拇泛。super的追溯不僅僅限于直接父類滨巴。super和this的用法相像,this代表本類對(duì)象的引用俺叭,super代表父類的內(nèi)存空間的標(biāo)識(shí)
java中只支持單支繼承恭取,不允許多重繼承。
一個(gè)父類可以派生多個(gè)子類熄守。
打個(gè)比方蜈垮,每個(gè)人只有一個(gè)爸爸。如果一個(gè)人有兩個(gè)爸爸裕照,那就不正常了攒发。子類中可以調(diào)用父類中的所有方法(構(gòu)造器除外),而且子類可以創(chuàng)建新的屬性和方法晋南。構(gòu)造方法中如果有參數(shù)的話晨继,需要用super進(jìn)行區(qū)分,this關(guān)鍵字是在本類中搬俊∥裳铮看到super就知道那個(gè)屬性是父類中的蜒茄。
? ? ? ? 繼承中的私有成員
關(guān)于繼承的規(guī)則:
? ? 父類中的成員,無論是公有(public)還是私有(private)餐屎,均被子類繼承檀葛。
只是因?yàn)樵L問修飾符的原因,子類不能對(duì)繼承的私有成員進(jìn)行直接訪問腹缩,但可以通過繼承的公有方法來訪問屿聋。
總的來說:
1.java的繼承只能是單繼承,一個(gè)類只能有一個(gè)直接父類(一個(gè)類只能有一個(gè)親生父親)藏鹊。
2.但是java支持多層繼承润讥,代代相傳。(比如傳家寶)
3.不能僅僅為了簡化代碼而去繼承一個(gè)類盘寡,如果要繼承一個(gè)類楚殿,必須是有is-a的關(guān)系