Java繼承

繼承初步

????????生活中繼承關(guān)系 父親 和 兒子 的關(guān)系? 父子關(guān)系? 第一順位繼承人 代碼中的繼承關(guān)系: 英雄聯(lián)盟: 所有的英雄人物都屬于英雄類(lèi),在這個(gè)類(lèi)里面規(guī)定了英雄應(yīng)該擁有的屬性,血量,攻擊力,魔法值,魔抗,物抗~? 但是每一個(gè)英雄,例如,凱特琳(皮城女警), 在這個(gè)英雄類(lèi)基礎(chǔ)上,特定的技能,特定的皮膚,特定的模型~~~ 在游戲開(kāi)發(fā)中,大量的使用【繼承】,來(lái)簡(jiǎn)化代碼,提供開(kāi)發(fā)效率? 用代碼來(lái)實(shí)現(xiàn)繼承關(guān)系:extends在代碼中繼承使用的關(guān)鍵字是extends,如果一個(gè)類(lèi)通過(guò)extends關(guān)鍵字繼承了其他類(lèi),那么就可以說(shuō),當(dāng)前類(lèi)是其他類(lèi)的子類(lèi),或者其他類(lèi)是當(dāng)前類(lèi)父類(lèi)

【發(fā)現(xiàn)】1.在創(chuàng)建子類(lèi)對(duì)象的時(shí)候,會(huì)首先自動(dòng)調(diào)用父類(lèi)的構(gòu)造方法這里是為了初始化屬于父類(lèi)的成員變量。有其父必有其子

2.父類(lèi)中的【非私有化】成員變量,子類(lèi)可以通過(guò)繼承之后得到使用的權(quán)限

3.父類(lèi)中的【非私有化】成員方法,子類(lèi)可以通過(guò)繼承之后得到使用的權(quán)限4.在父類(lèi)中用private修飾的私有化成員方法,這個(gè)私有化成員方法不能通過(guò)繼承該類(lèi)的子類(lèi)對(duì)象來(lái)調(diào)用原因:私有化的成員方法,只能在當(dāng)前類(lèi)的內(nèi)部使用,外部沒(méi)有任何使用權(quán)限5.父類(lèi)中用private修飾的私有化成員變量,這個(gè)私有化的成員變量不能通過(guò)繼承該類(lèi)的子類(lèi)對(duì)象來(lái)調(diào)用原因:私有化的成員變量,只能在當(dāng)前類(lèi)的內(nèi)部使用,外部沒(méi)有任何使用權(quán)限【總結(jié)】在繼承中,父類(lèi)里沒(méi)有私有化的成員變量和成員方法都可以被子類(lèi)繼承,但是一旦私有化,子類(lèi)就無(wú)法繼承這些屬性或者方法, 原理是封裝思想。【使用繼承的注意事項(xiàng)】繼承可以節(jié)省代碼,提高開(kāi)發(fā)效率,但是在使用繼承的時(shí)候,前提條件就是,兩個(gè)類(lèi)之間的確包含有繼承的關(guān)系例如:Animal 動(dòng)物類(lèi)Dog 狗Cat 貓綠蘿 這里不屬于動(dòng)物類(lèi),不能使用繼承關(guān)系

super關(guān)鍵字

????????子類(lèi)在創(chuàng)建對(duì)象時(shí)候,首先會(huì)自動(dòng)調(diào)用父類(lèi)的構(gòu)造方法【前提】父類(lèi)的構(gòu)造方法,不能被子類(lèi)繼承[問(wèn)題]在子類(lèi)中如果通過(guò)構(gòu)造方法初始化從父類(lèi)繼承而來(lái)的成員變量,可能會(huì)存在一定的隱患,如果直接使用this.成員變量賦值操作,會(huì)導(dǎo)致父類(lèi)中的成員變量不符合一些業(yè)務(wù)邏輯,或者生活邏輯。[考慮]能否借助于父類(lèi)的構(gòu)造方法,來(lái)初始化原本屬于父類(lèi)的成員變量[解決]借助于super關(guān)鍵字? 調(diào)用父類(lèi)方法的關(guān)鍵字super關(guān)鍵字的注意事項(xiàng):

1.super關(guān)鍵字可以在子類(lèi)中直接調(diào)用父類(lèi)的成員方法

2.【重點(diǎn)】使用super調(diào)用父類(lèi)的構(gòu)造方法:super(實(shí)際參數(shù)); Java編譯器會(huì)根據(jù)不同的參數(shù)類(lèi)型,來(lái)調(diào)用不同的父類(lèi)中的構(gòu)造方法

3.使用super關(guān)鍵字調(diào)用父類(lèi)的構(gòu)造方法的時(shí)候,要求必須當(dāng)前代碼塊的第一行

4.this關(guān)鍵字調(diào)用構(gòu)造方法,和super關(guān)鍵字調(diào)用構(gòu)造方法,不能同時(shí)出現(xiàn)在一個(gè)代碼塊里面

5.在子類(lèi)的構(gòu)造方法中,如果沒(méi)有通過(guò)super指定調(diào)用父類(lèi)的構(gòu)造方法,那么Java編譯器會(huì)幫我們自動(dòng)調(diào)用父類(lèi)的無(wú)參構(gòu)造方法來(lái)使用。[建議]存在繼承關(guān)系下, 父類(lèi)中最好提供一個(gè)無(wú)參的構(gòu)造方法供子類(lèi)使用

? ? ? ?[回顧]this關(guān)鍵字調(diào)用構(gòu)造方法的格式:1.this(實(shí)際參數(shù))? Java編譯器會(huì)根據(jù)不同的參數(shù)類(lèi)型,來(lái)調(diào)用不同的構(gòu)造方法2.如果用this調(diào)用構(gòu)造方法,必須在當(dāng)前代碼塊的第一行3.this關(guān)鍵字調(diào)用構(gòu)造方法的時(shí)候,不能相互調(diào)用

重寫(xiě)

? ? ? [問(wèn)題]父親,業(yè)余活動(dòng),喜歡釣魚(yú),但是兒子業(yè)余活動(dòng),喜歡吃雞父類(lèi)中存在一個(gè)playGame()的方法,這個(gè)方法是比較符合父類(lèi)的實(shí)際情況子類(lèi)繼承之后,也能調(diào)用playGame(),但是這個(gè)方法不太符合子類(lèi)的情況[期望]需要讓繼承而來(lái)的方法, 更加適合子類(lèi)的實(shí)際情況【重寫(xiě)】子類(lèi)中存在和父類(lèi)同名,同參數(shù),同返回值的方法,這種情況稱(chēng)之為【重寫(xiě)】通常會(huì)使用【注解】@Override開(kāi)啟嚴(yán)格的重寫(xiě)檢查如果父類(lèi)中沒(méi)有這個(gè)方法,使用@Override檢查會(huì)報(bào)錯(cuò)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容