日常學(xué)習(xí) 8.7 Java面向?qū)ο笕筇匦灾?繼承
8.07
Java面向?qū)ο笕筇匦灾?繼承
學(xué)習(xí)目標(biāo):掌握語(yǔ)法和特點(diǎn)
Java中的繼承(體系)
-繼承關(guān)系 類與類之間的關(guān)系(親的血緣關(guān)系)
-實(shí)習(xí)關(guān)系 類與接口之間的關(guān)系(師徒關(guān)系)
繼承關(guān)系概念
1.關(guān)鍵字 extends (意思為擴(kuò)展)
class A extends B
A 代表子類 所有的子孫后代(徒子徒孫)
B 代表父類 所有的父輩(所有的師父,師祖)
一個(gè)父類能有很多子類
案例:
父類:動(dòng)物類 Animal
子類:貓Cat 狗Dog 豬Pig
特點(diǎn):
-子類可以繼承父類所有的屬性和方法,除了構(gòu)造方法
-所有的類沒(méi)有寫(xiě)繼承,默認(rèn)繼承自O(shè)bject
-Java中一個(gè)父類能擴(kuò)展多個(gè)子類
-Java中只支持單繼承(一個(gè)子類只能有一個(gè)直接的父類)
-Java中支持多層繼承(一層一層繼承下來(lái))
-如果父類封裝了起來(lái),子類無(wú)法直接訪問(wèn)父類封裝的屬性,
但是子類可以通過(guò)父類提供的公開(kāi)的方式訪問(wèn)
-super:代表當(dāng)前類的父類
如果子類使用有參構(gòu)造進(jìn)行創(chuàng)建對(duì)象
方式一:在構(gòu)造方法中調(diào)用set方法進(jìn)行賦值
方式二:利用父類的有參構(gòu)造進(jìn)行傳值 super(name,age)
繼承的好處
1.提高代碼的維護(hù)性(增 刪 改)
弊端:增加了類與類之間的耦合度(權(quán)衡)
2.提高了代碼的擴(kuò)展性(父類)
父類未來(lái)可以在非入侵的情況下,擴(kuò)展更多的子類
方法的重載
出現(xiàn)在同一個(gè)類中
方法名相同
參數(shù)列表不同(類型、數(shù)量、順序)
與返回值無(wú)關(guān)
方法的重寫(xiě)
出現(xiàn)在繼承體系中
方法名相同
參數(shù)列表相同
返回值類型相同
只有方法類的代碼不同
抽象 (為繼承而生,在繼承的基礎(chǔ)上做強(qiáng)制規(guī)定)
基本含義:關(guān)鍵字 abstract (抽象的修飾符)
1.修飾類 (抽象類)
-無(wú)法實(shí)例化(new不出來(lái))
-只能被繼承
-普通類中有點(diǎn)元素,抽象類中都有,抽象類中還可以有抽象方法
2.修飾方法 (抽象方法)
-沒(méi)有方法體
-抽象方法必須被重寫(xiě)
-抽象方法只能出現(xiàn)在抽象類
使用場(chǎng)景:
1.當(dāng)父類絕對(duì)不需要?jiǎng)?chuàng)建對(duì)象時(shí)可以考慮將父類抽象化
2.如果父類中的某些方法絕對(duì)不需要立即實(shí)現(xiàn),而是未來(lái)靠子類重寫(xiě),可以考慮將方法抽象化
@Override
Java自帶的注解,用來(lái)檢測(cè)當(dāng)前的方法是不是對(duì)父類的方法的重寫(xiě)
final最終
基本含義:是一個(gè)關(guān)鍵字 final 最終的修飾符
1.修飾類(最終類)
-無(wú)法被繼承(沒(méi)有后代) 比如 String Scanner
2.修飾方法(最終方法)
-無(wú)法被重寫(xiě)
3.修飾屬性(最終屬性)
共同特性:1.一開(kāi)始就要賦值
2.無(wú)法被修改
-基本數(shù)據(jù)類型
本身的值無(wú)法被修改
-引用數(shù)據(jù)類型
地址無(wú)法被修改,但是內(nèi)部的內(nèi)容可以改
繼承的使用場(chǎng)景:
當(dāng)多個(gè)類具有共同屬性和方法時(shí),可以考慮將這些共性抽離出來(lái)形成一個(gè)父類。
如果要對(duì)現(xiàn)有的類進(jìn)行 完善/擴(kuò)展/增強(qiáng) 可以考慮在繼承的基礎(chǔ)上,對(duì)父類的方法進(jìn)行重寫(xiě)。
作業(yè):猜拳游戲(面向?qū)ο蟀妫?br>
設(shè)計(jì)類:
父類:角色
子類:
玩家
電腦/機(jī)器人
裁判(功能)
應(yīng)用程序的類(run方法)
測(cè)試類(讓?xiě)?yīng)用程序啟動(dòng))
注意:不要到處new對(duì)象
預(yù)習(xí):多態(tài)與接口
遇到問(wèn)題:
判斷單局勝負(fù)時(shí)如何多個(gè)傳遞玩家或者電腦的信息
解決:
直接把玩家和電腦的對(duì)象傳參進(jìn)去
心得:
今天學(xué)習(xí)了Java面向?qū)ο笾^承,今天的內(nèi)容較簡(jiǎn)單,多看多做多記就好
支線任務(wù):
1.什么是遞歸,有什么注意事項(xiàng)
-遞歸:
它是指一段程序直接或者間接調(diào)用自身的一種方法,
通過(guò)這種形式執(zhí)行需要進(jìn)行一些固定步驟的許多操作,
它可以把一個(gè)復(fù)雜并且龐大的問(wèn)題簡(jiǎn)單化,
通過(guò)專注于解決它分化出來(lái)的小問(wèn)題從而解決大問(wèn)題,
從而大大減少我們的代碼量,
是提高我們編碼效率的很好方法。
-注意事項(xiàng):
1. 基線條件:遞歸必須有一個(gè)或多個(gè)終止條件,當(dāng)滿足該條件時(shí),遞歸將停止。
2. 遞歸條件:遞歸必須包含一些自我調(diào)用的步驟,
這些步驟需要將問(wèn)題分解為較小的子問(wèn)題。
每個(gè)子問(wèn)題都需要用相同的算法解決,并最終計(jì)算出最終答案。
3. 過(guò)程不重疊:每個(gè)遞歸調(diào)用必須解決不同的子問(wèn)題,以減少或消除冗余計(jì)算的可能性。
4. 子問(wèn)題結(jié)構(gòu)相同:遞歸必須采用相同的算法解決每個(gè)子問(wèn)題,以確保正確性和一致性。