繼承初步
????????生活中繼承關(guān)系 父親 和 兒子 的關(guān)系伐脖? 父子關(guān)系? 第一順位繼承人 代碼中的繼承關(guān)系: 英雄聯(lián)盟: 所有的英雄人物都屬于英雄類蝶溶,在這個(gè)類里面規(guī)定了英雄應(yīng)該擁有的屬性,血量快毛,攻擊力义锥,魔法值淌喻,魔抗,物抗~? 但是每一個(gè)英雄瞄摊,例如勋又,凱特琳(皮城女警), 在這個(gè)英雄類基礎(chǔ)上,特定的技能换帜,特定的皮膚楔壤,特定的模型~~~ 在游戲開發(fā)中,大量的使用【繼承】惯驼,來簡化代碼蹲嚣,提供開發(fā)效率? 用代碼來實(shí)現(xiàn)繼承關(guān)系:extends在代碼中繼承使用的關(guān)鍵字是extends递瑰,如果一個(gè)類通過extends關(guān)鍵字繼承了其他類,那么就可以說隙畜,當(dāng)前類是其他類的子類抖部,或者其他類是當(dāng)前類父類
【發(fā)現(xiàn)】1.在創(chuàng)建子類對象的時(shí)候,會(huì)首先自動(dòng)調(diào)用父類的構(gòu)造方法這里是為了初始化屬于父類的成員變量议惰。有其父必有其子
2.父類中的【非私有化】成員變量慎颗,子類可以通過繼承之后得到使用的權(quán)限
3.父類中的【非私有化】成員方法,子類可以通過繼承之后得到使用的權(quán)限4.在父類中用private修飾的私有化成員方法言询,這個(gè)私有化成員方法不能通過繼承該類的子類對象來調(diào)用原因:私有化的成員方法俯萎,只能在當(dāng)前類的內(nèi)部使用,外部沒有任何使用權(quán)限5.父類中用private修飾的私有化成員變量运杭,這個(gè)私有化的成員變量不能通過繼承該類的子類對象來調(diào)用原因:私有化的成員變量讯屈,只能在當(dāng)前類的內(nèi)部使用,外部沒有任何使用權(quán)限【總結(jié)】在繼承中县习,父類里沒有私有化的成員變量和成員方法都可以被子類繼承涮母,但是一旦私有化,子類就無法繼承這些屬性或者方法躁愿, 原理是封裝思想叛本。【使用繼承的注意事項(xiàng)】繼承可以節(jié)省代碼彤钟,提高開發(fā)效率来候,但是在使用繼承的時(shí)候,前提條件就是逸雹,兩個(gè)類之間的確包含有繼承的關(guān)系例如:Animal 動(dòng)物類Dog 狗Cat 貓綠蘿 這里不屬于動(dòng)物類营搅,不能使用繼承關(guān)系
????????子類在創(chuàng)建對象時(shí)候,首先會(huì)自動(dòng)調(diào)用父類的構(gòu)造方法【前提】父類的構(gòu)造方法梆砸,不能被子類繼承[問題]在子類中如果通過構(gòu)造方法初始化從父類繼承而來的成員變量转质,可能會(huì)存在一定的隱患,如果直接使用this.成員變量賦值操作帖世,會(huì)導(dǎo)致父類中的成員變量不符合一些業(yè)務(wù)邏輯休蟹,或者生活邏輯。[考慮]能否借助于父類的構(gòu)造方法日矫,來初始化原本屬于父類的成員變量[解決]借助于super關(guān)鍵字? 調(diào)用父類方法的關(guān)鍵字super關(guān)鍵字的注意事項(xiàng):
1.super關(guān)鍵字可以在子類中直接調(diào)用父類的成員方法
2.【重點(diǎn)】使用super調(diào)用父類的構(gòu)造方法:super(實(shí)際參數(shù)); Java編譯器會(huì)根據(jù)不同的參數(shù)類型赂弓,來調(diào)用不同的父類中的構(gòu)造方法
3.使用super關(guān)鍵字調(diào)用父類的構(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.在子類的構(gòu)造方法中,如果沒有通過super指定調(diào)用父類的構(gòu)造方法窃诉,那么Java編譯器會(huì)幫我們自動(dòng)調(diào)用父類的無參構(gòu)造方法來使用杨耙。[建議]存在繼承關(guān)系下赤套, 父類中最好提供一個(gè)無參的構(gòu)造方法供子類使用
? ? ? ?[回顧]this關(guān)鍵字調(diào)用構(gòu)造方法的格式:1.this(實(shí)際參數(shù))? Java編譯器會(huì)根據(jù)不同的參數(shù)類型,來調(diào)用不同的構(gòu)造方法2.如果用this調(diào)用構(gòu)造方法按脚,必須在當(dāng)前代碼塊的第一行3.this關(guān)鍵字調(diào)用構(gòu)造方法的時(shí)候于毙,不能相互調(diào)用
? ? ? [問題]父親,業(yè)余活動(dòng)辅搬,喜歡釣魚唯沮,但是兒子業(yè)余活動(dòng),喜歡吃雞父類中存在一個(gè)playGame()的方法堪遂,這個(gè)方法是比較符合父類的實(shí)際情況子類繼承之后介蛉,也能調(diào)用playGame(),但是這個(gè)方法不太符合子類的情況[期望]需要讓繼承而來的方法溶褪, 更加適合子類的實(shí)際情況【重寫】子類中存在和父類同名币旧,同參數(shù),同返回值的方法猿妈,這種情況稱之為【重寫】通常會(huì)使用【注解】@Override開啟嚴(yán)格的重寫檢查如果父類中沒有這個(gè)方法吹菱,使用@Override檢查會(huì)報(bào)錯(cuò)