TP02-繼承-ACCP-6.0-S2-3-使用Java實(shí)現(xiàn)面向?qū)ο缶幊?課件
單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),單擊此處編輯母版標(biāo)題樣式,繼承,第二章,回顧及作業(yè)點(diǎn)評(píng),如何從現(xiàn)實(shí)世界抽象出類(lèi)?,構(gòu)造方法的語(yǔ)法要求是什么?,static,和,final,的含義是什么?,請(qǐng)一位同學(xué)到白板上畫(huà)出,Dog,類(lèi)的類(lèi)圖。,預(yù)習(xí)檢查,如何繼承一個(gè)類(lèi)?,使用繼承有什么好處?,抽象類(lèi)和抽象方法的特點(diǎn)是什么?,本章任務(wù),優(yōu)化電子寵物系統(tǒng),實(shí)現(xiàn)汽車(chē)租賃系統(tǒng)計(jì)價(jià)功能,為什么使用繼承,2-1,這兩個(gè)類(lèi)圖有什么問(wèn)題?,-name:String,-health:int,-love:int,-strain:String,Dog,+print():void,+getName():String,+getHealth,():int,+getLove():int,+getStrain:String,+Dog(),-name:String,-health:int,-love:int,-sex:String,Penguin,+print():void,+getName():String,+getHealth,():int,+getLove():int,+getSex():String,+Penguin(),使用繼承優(yōu)化設(shè)計(jì),將重復(fù)代碼抽取到父類(lèi)中,為什么使用繼承,2-2,使用繼承優(yōu)化后:,子類(lèi)與父類(lèi)是,is-a,關(guān)系,減少代碼量,方便修改代碼,如何使用繼承,使用繼承,編寫(xiě)父類(lèi),編寫(xiě)子類(lèi),繼承父類(lèi),class Pet,/,公共的屬性和方法,class Dog,extends,Pet,/,子類(lèi)特有的屬性和方法,class Penguin,extends,Pet,只能繼承一個(gè)父類(lèi),繼承關(guān)鍵字,對(duì)比,C#,用“,:”,理解繼承,4-2,有些父類(lèi)成員不能繼承,private,成員,子類(lèi)與父類(lèi)不在同包,使用默認(rèn)訪(fǎng)問(wèn)權(quán)限的成員,構(gòu)造方法,演示示例:不能繼承的情況,理解繼承,4-3,訪(fǎng)問(wèn)修飾符,protected,可以修飾屬性和方法,本類(lèi)、同包、子類(lèi)可以訪(fǎng)問(wèn),訪(fǎng)問(wèn)修飾符總結(jié),訪(fǎng)問(wèn)修飾符,本類(lèi),同包,子類(lèi),其他,private,默認(rèn),(friendly),protected,public,在何處使用繼承,何時(shí)使用繼承?,繼承與真實(shí)世界類(lèi)似,只要說(shuō),“,貓是哺乳動(dòng)物,”,,貓的很多屬性、行為,就不言自明了,藏獒是一種狗,繼承是代碼重用的一種方式,將子類(lèi)都有的屬性和行為放到父類(lèi)中,符合,is-a,關(guān)系的設(shè)計(jì)使用繼承,小結(jié),2-2,閱讀代碼,說(shuō)出運(yùn)行結(jié)果,class Car,private int site=4;/,座位數(shù),Car(),System.out.println(,載客量是,+site+,人,);,public void setSite(int site),this.site=site;,void print(),System.out.print(,載客量是,+site+,人,);,class Bus extends Car,Bus(int site),setSite(site);,public static void main(String args),Bus bus=new Bus(20);,bus.print();,載客量是,4,人,載客量是,20,人,方法重寫(xiě),子類(lèi)中有和父類(lèi)相同簽名的方法,會(huì)如何?,演示示例:斷點(diǎn)調(diào)試,print(),方法,子類(lèi),重寫(xiě),父類(lèi)方法,指導(dǎo),優(yōu)化電子寵物系統(tǒng),2-1,訓(xùn)練要點(diǎn):,繼承,子類(lèi)重寫(xiě)父類(lèi)方法,理解繼承中的初始化過(guò)程,需求說(shuō)明:,優(yōu)化電子寵物系統(tǒng),使用繼承實(shí)現(xiàn),Dog,類(lèi)和,Penguin,類(lèi),打印寵物信息,講解需求說(shuō)明,指導(dǎo),優(yōu)化電子寵物系統(tǒng),2-2,實(shí)現(xiàn)思路:,完成時(shí)間:,20,分鐘,繼承,抽象類(lèi),以下代碼有什么問(wèn)題?,Java,中也使用抽象類(lèi),限制實(shí)例化,Pet pet=new Pet(,貝貝,20,40);,pet.print();,實(shí)例化,Pet,沒(méi)有意義,public,abstract,class Pet,在,C#,中通過(guò)抽象類(lèi)實(shí)現(xiàn),抽象方法,以下代碼有什么問(wèn)題?,abstract,也可用于方法,抽象方法,抽象方法沒(méi)有方法體,抽象方法必須在抽象類(lèi)里,抽象方法必須在子類(lèi)中被實(shí)現(xiàn),除非子類(lèi)是抽象類(lèi),public,abstract,void print();,沒(méi)有方法體,public abstract class Pet,public void print(),/,每個(gè)子類(lèi)的實(shí)現(xiàn)不同,指導(dǎo),抽象,Pet,類(lèi),2-1,訓(xùn)練要點(diǎn):,抽象類(lèi)的定義和繼承,抽象方法定義和重寫(xiě),需求說(shuō)明:,修改,Pet,類(lèi)為抽象類(lèi),修改,Pet,類(lèi)的,print(),方法為抽象方法,輸出,Dog,信息,講解需求說(shuō)明,final,用法,Penguin,類(lèi)不希望再被其他類(lèi)繼承?,使用,final,類(lèi),方法不希望被重寫(xiě)?,使用,final,方法,屬性值不希望被修改?,使用,final,方法,public,final,class Penguin extends Pet,/,最終版的類(lèi),public,final,void print(),/,最終版的方法,public class Penguin,final,String home=,南極,;/,居住地,public void setHome(String name),this.home=home;/,錯(cuò)誤,,home,不可以再次賦值,最終版的屬性值,共性問(wèn)題集中講解,常見(jiàn)調(diào)試問(wèn)題及解決辦法,代碼規(guī)范問(wèn)題,共性問(wèn)題集中講解,常見(jiàn)錯(cuò)誤,請(qǐng)指出下面代碼的錯(cuò)誤,class Dog,String name;,public Dog(String name),this.name=name;,class Test,public static void main(String args),final Dog dog=new Dog(,歐歐,);,dog.name=,美美,;,dog=new Dog(,亞亞,);,使用,final,修飾引用型變量,變量不可以再指向另外的對(duì)象,使用,final,修飾引用型變量,變量的值是固定不變的,而變量所指向的對(duì)象的屬性值是可變的,綜合案例分析,2-1,發(fā)現(xiàn)類(lèi),發(fā)現(xiàn)類(lèi)的屬性,綜合案例分析,2-2,發(fā)現(xiàn)類(lèi)的方法,優(yōu)化設(shè)計(jì),編寫(xiě)程序入口,練習(xí),編寫(xiě)測(cè)試代碼運(yùn)行,需求說(shuō)明:,編寫(xiě)測(cè)試代碼運(yùn)行,完成時(shí)間:,5,分鐘,總結(jié),如何繼承一個(gè)類(lèi)?,繼承有什么好處?,抽象類(lèi)和抽象方法的特點(diǎn)是什么?,面向?qū)ο笤O(shè)計(jì)的步驟是什么?,作業(yè),課后作業(yè),必做,教員備課時(shí)在此添加內(nèi)容,選做,教員備課時(shí)在此添加內(nèi)容,提交時(shí)間:,xxx,提交形式:,xxx,預(yù)習(xí)作業(yè),背誦英文單詞,教員備課時(shí)在此添加內(nèi)容,