資源描述:
《繼承接口和內(nèi)部類.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、●繼承●多態(tài)●抽象類●接口●內(nèi)部類第四章繼承、接口和抽象類●繼承●繼承的特點(diǎn)●extends父類名;若無extends,則默認(rèn)父類Object●子類將繼承父類成員,但不能直接訪問父類private成員●單繼承,多層繼承●子類對(duì)父類可做擴(kuò)展和特殊化(1)創(chuàng)建新的成員:成員變量和方法(2)重新定義父類中已有的成員變量:隱藏(3)重新定義父類中已有的方法:覆蓋(override)子類中的方法應(yīng)與父類中的被覆蓋的方法有完全相同的:參數(shù)列表、返回值;而且訪問權(quán)限不能更嚴(yán)格●super():調(diào)用父類被覆蓋的方法;父類構(gòu)造方法例:Circle.java,Cylinder.java●繼承
2、●繼承的特點(diǎn)●子類的構(gòu)造方法(1)若子類的構(gòu)造方法中,沒有使用super調(diào)用父類的構(gòu)造方法和this調(diào)用重載的其他構(gòu)造方法,則在創(chuàng)建子類對(duì)象時(shí),系統(tǒng)默認(rèn)先調(diào)用父類的無參構(gòu)造方法,然后執(zhí)行子類的構(gòu)造方法;(2)在子類的構(gòu)造方法中使用super(參數(shù))調(diào)用父類的含參構(gòu)造方法,super必須是第一句(3)this()和super()不能同時(shí)出現(xiàn)例:Sandwich.java(構(gòu)造方法調(diào)用次序)●多態(tài)一個(gè)引用變量可以引用多種實(shí)際類型的現(xiàn)象稱為多態(tài),在運(yùn)行時(shí)能夠自動(dòng)選擇調(diào)用適當(dāng)?shù)姆椒ǚQ為動(dòng)態(tài)綁定●引用變量的類型轉(zhuǎn)換●子類引用變量轉(zhuǎn)換成父類引用變量(1)規(guī)則:沿著繼承層次,從下往上,
3、子類可以自動(dòng)轉(zhuǎn)換成父類(2)轉(zhuǎn)換時(shí)機(jī):賦值,方法調(diào)用(參數(shù)傳遞)EmployeeManagerSecretaryProgrammerManagerm=newManager(…);Employeee=m;//賦值時(shí)發(fā)生自動(dòng)轉(zhuǎn)換e.raiseSalary();//正確e.setBonus();//錯(cuò)誤raiseSalary()setBonus()●多態(tài)●引用變量的類型轉(zhuǎn)換●父類引用變量轉(zhuǎn)換成子類引用變量(強(qiáng)制轉(zhuǎn)換)子類引用變量=(子類)父類引用變量EmployeeManagerSecretaryProgrammerEmployeee=newEmployee(…);Manage
4、rm=e;//錯(cuò)誤Employeee=newEmployee(…);Managerm=Manger(e);//強(qiáng)制轉(zhuǎn)換●多態(tài)●引用變量的類型轉(zhuǎn)換●Object類,toString方法例:PolyTest.java多態(tài):為父類對(duì)象設(shè)計(jì)的任何代碼都可以應(yīng)用于子類●動(dòng)態(tài)綁定●對(duì)象方法的執(zhí)行過程●優(yōu)點(diǎn):無需對(duì)現(xiàn)存代碼進(jìn)行修改就可對(duì)程序進(jìn)行擴(kuò)展CnCn-1Cn-2C1C0……順序查找●instanceof對(duì)象引用instanceof類(或接口)例:Polymorphism.java●抽象類●抽象類●abstract●不包含方法定義的方法稱為抽象方法●任何包含抽象方法的類必須聲明為抽
5、象類●不能生成抽象類的對(duì)象●抽象類的子類必須覆蓋所有的抽象方法,才能生成對(duì)象,否則仍然是抽象類例:AbstractClassTest.javaarea()CircleSquareShapearea()area()area()Triangle●接口●接口●描述類具有什么功能,而不給出每個(gè)功能的具體實(shí)現(xiàn)●接口中的方法和成員變量●定義接口方法:隱含為publicabstract變量:隱含為publicstaticfinal[public]interface接口名[extends接口列表]{返回類型方法名();…常量類型常量名=...;…}●接口●接口●使用接口當(dāng)一個(gè)類聲明imp
6、lements某一interface時(shí),必須具體實(shí)現(xiàn)該interface中定義的抽象方法,并把此方法定義為public的(抽象類除外)●利用接口可實(shí)現(xiàn)多重繼承,一個(gè)類可以實(shí)現(xiàn)一個(gè)或多個(gè)接口例:InterfaceTest.java接口與抽象類的區(qū)別:●接口中,數(shù)據(jù)必須是常量,抽象類可以有非常量的數(shù)據(jù);●接口中,每個(gè)方法只有方法名定義,沒有實(shí)現(xiàn),抽象類可以有具體的實(shí)現(xiàn)方法;●Java對(duì)類的擴(kuò)展只允許單重繼承,對(duì)接口允許多重繼承;●強(qiáng)是關(guān)系:明顯地描述父子關(guān)系,用抽象類;弱是關(guān)系:對(duì)象擁有某種屬性,用接口;●內(nèi)部類在一個(gè)類的內(nèi)部嵌套定義的類●成員內(nèi)部類●可以訪問外部類的成員變量
7、和方法;反過來不行●可以聲明為private,protected,public或缺省●若為static,則不能訪問非static成員,很少使用●若局部變量,內(nèi)部類的成員變量和外部類的成員變量重名則分別用變量名;this.變量名:外部類名.this.變量名表示●引用:若為public,則外部類名.內(nèi)部類名Outero=newOuter();Outer.Inneri=o.newInner();或Outer.Inneri=newOuter.newInner();例:InnerClassTest.java●內(nèi)部類●方法中的內(nèi)部類●可以