




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三章第三章 承繼和多態(tài)承繼和多態(tài)本章要點(diǎn)本章要點(diǎn)一、承繼和多態(tài)的概念一、承繼和多態(tài)的概念二、類成員的承繼二、類成員的承繼 2.1 屬性與方法的承繼屬性與方法的承繼 2.2 this 和和super 的運(yùn)用的運(yùn)用 2.3 構(gòu)造函數(shù)的承繼和重載構(gòu)造函數(shù)的承繼和重載 2.4 最終類和最終類成員最終類和最終類成員 2.5 對(duì)象在承繼關(guān)系中的改動(dòng)對(duì)象在承繼關(guān)系中的改動(dòng) 2.6 籠統(tǒng)類在承繼中的特點(diǎn)籠統(tǒng)類在承繼中的特點(diǎn) 一、承繼和多態(tài)的概念一、承繼和多態(tài)的概念1、 承繼的概念:承繼的概念: 經(jīng)過(guò)必要的闡明可以實(shí)現(xiàn)某個(gè)類無(wú)需重新定義就擁有另經(jīng)過(guò)必要的闡明可以實(shí)現(xiàn)某個(gè)類無(wú)需重新定義就擁有另一個(gè)類的某些屬性和
2、方法,并把這種關(guān)系稱為承繼,先一個(gè)類的某些屬性和方法,并把這種關(guān)系稱為承繼,先定義的類成為父類,后定義的類稱為子類,并且允許多定義的類成為父類,后定義的類稱為子類,并且允許多層的承繼關(guān)系層的承繼關(guān)系 Java中的類是以類的層次來(lái)存在的。中的類是以類的層次來(lái)存在的。Java中的類可用中的類可用extends關(guān)鍵字來(lái)聲明為另一個(gè)類的子類關(guān)鍵字來(lái)聲明為另一個(gè)類的子類subclass.子子類從父類類從父類(superclass)那里承繼那里承繼(inherit)變量和方法變量和方法,然后然后可像在子類中聲明的一樣來(lái)運(yùn)用這些變量和方法可像在子類中聲明的一樣來(lái)運(yùn)用這些變量和方法.車輛車輛機(jī)動(dòng)車機(jī)動(dòng)車非機(jī)動(dòng)
3、車非機(jī)動(dòng)車內(nèi)燃機(jī)車內(nèi)燃機(jī)車電車電車人力車人力車蓄力車蓄力車柴油機(jī)車柴油機(jī)車汽油機(jī)車汽油機(jī)車馬車馬車手推車手推車自行車自行車承繼的定義承繼的定義public class Vehicle String color=“white; protected float speed; public void accelerate() .public class Automobile extends Vehicle float fuelConsumption; public void decelerate() .public class Car extends Automobile private int p
4、rice; public void decelerate() speed =speed-20.f; 注:注:承繼可以使子類擁有父類的非私有屬性和方法,而不需承繼可以使子類擁有父類的非私有屬性和方法,而不需求在子類的類定義時(shí)重新定義父類的這些屬性和方法,求在子類的類定義時(shí)重新定義父類的這些屬性和方法,子類即可以堅(jiān)持父類原有的屬性和方法,也可以對(duì)從子類即可以堅(jiān)持父類原有的屬性和方法,也可以對(duì)從父類那里承繼而來(lái)的屬性和方法進(jìn)展修正,在定義了父類那里承繼而來(lái)的屬性和方法進(jìn)展修正,在定義了承繼關(guān)系后,我們改動(dòng)父類的一個(gè)屬性或方法時(shí),子承繼關(guān)系后,我們改動(dòng)父類的一個(gè)屬性或方法時(shí),子類也會(huì)自動(dòng)改動(dòng),但是這些
5、屬性和方法必需是非私有,類也會(huì)自動(dòng)改動(dòng),但是這些屬性和方法必需是非私有,并且沒(méi)有被子類重新定義的并且沒(méi)有被子類重新定義的多態(tài)的概念多態(tài)的概念多態(tài)是指在一棵承繼樹(shù)中的類可以有多個(gè)同名但不同方法體多態(tài)是指在一棵承繼樹(shù)中的類可以有多個(gè)同名但不同方法體以及不同形參的方法。以及不同形參的方法。兩種情況:兩種情況:覆蓋:在子類中直接定義和父類同樣的屬性和方法,但重新覆蓋:在子類中直接定義和父類同樣的屬性和方法,但重新編寫了方法體,即子類與父類方法的星參與前往值都一樣,編寫了方法體,即子類與父類方法的星參與前往值都一樣,而內(nèi)部處置不同,這種方法在運(yùn)用過(guò)程中,而內(nèi)部處置不同,這種方法在運(yùn)用過(guò)程中,Java虛擬
6、時(shí)機(jī)虛擬時(shí)機(jī)根據(jù)調(diào)用這個(gè)方法的類來(lái)確定哪個(gè)方法被調(diào)用根據(jù)調(diào)用這個(gè)方法的類來(lái)確定哪個(gè)方法被調(diào)用重載:同一個(gè)類定義中有多個(gè)同名的方法,但有不同的形參,重載:同一個(gè)類定義中有多個(gè)同名的方法,但有不同的形參,而且每個(gè)方法有不同的方法體,調(diào)用時(shí)根據(jù)形參的個(gè)數(shù)和而且每個(gè)方法有不同的方法體,調(diào)用時(shí)根據(jù)形參的個(gè)數(shù)和類型來(lái)決議調(diào)用的是哪個(gè)方法類型來(lái)決議調(diào)用的是哪個(gè)方法 注:不能根據(jù)前往值的類型來(lái)區(qū)分重載的方法注:不能根據(jù)前往值的類型來(lái)區(qū)分重載的方法二、二、 類成員的承繼類成員的承繼類成員:屬性、方法、構(gòu)造函數(shù)類成員:屬性、方法、構(gòu)造函數(shù)屬性的承繼屬性的承繼屬性的承繼:子類不需求再定義就擁有了父類已有的非屬性的承
7、繼:子類不需求再定義就擁有了父類已有的非私有屬性私有屬性注注:承繼了屬性,表示子類被創(chuàng)建時(shí)另開(kāi)辟了新的空間來(lái)承繼了屬性,表示子類被創(chuàng)建時(shí)另開(kāi)辟了新的空間來(lái)存儲(chǔ)從父類承繼而來(lái)的屬性,其初值應(yīng)該是父類中該存儲(chǔ)從父類承繼而來(lái)的屬性,其初值應(yīng)該是父類中該屬性的初值,但之后,雙方的一樣屬性就是彼此相互屬性的初值,但之后,雙方的一樣屬性就是彼此相互獨(dú)立的變量了。只需當(dāng)父類的該屬性的定義發(fā)生了變獨(dú)立的變量了。只需當(dāng)父類的該屬性的定義發(fā)生了變化,子類中的該屬性定義也跟著發(fā)生變化化,子類中的該屬性定義也跟著發(fā)生變化屬性的覆蓋:子類可以重新定義父類的非私有屬性,這屬性的覆蓋:子類可以重新定義父類的非私有屬性,這樣
8、,子類定義了一個(gè)與父類同名的屬性,并且子類也樣,子類定義了一個(gè)與父類同名的屬性,并且子類也承繼了父類的該屬性,在運(yùn)用時(shí)經(jīng)過(guò)調(diào)用該屬性的變承繼了父類的該屬性,在運(yùn)用時(shí)經(jīng)過(guò)調(diào)用該屬性的變量或者方法來(lái)決議運(yùn)用哪一個(gè)。量或者方法來(lái)決議運(yùn)用哪一個(gè)。public class Fatherint a=100;public void miner()a-;public static void main(String arg)Father x=new Father();Son y=new Son();System.out.println(a of son is : +y.a);System.out.println
9、(a of sons super is : +y.getA();y.miner();System.out.println(a of son is :+y.a);System.out.println(a of sons super is : +y.getA();class Son extends Father int a=0;public int getA()return super.a;方法的承繼方法的承繼方法的承繼:子類不需求重新定義就可以擁有父類的非方法的承繼:子類不需求重新定義就可以擁有父類的非私有方法私有方法 方法的覆蓋:子類定義一個(gè)和父類同名而且同形參表方法的覆蓋:子類定義一個(gè)和父類
10、同名而且同形參表的方法,假設(shè)子類中需求用父類的被覆蓋的方法,可的方法,假設(shè)子類中需求用父類的被覆蓋的方法,可運(yùn)用關(guān)鍵字運(yùn)用關(guān)鍵字super來(lái)實(shí)現(xiàn)來(lái)實(shí)現(xiàn) 方法的重載:方法的重載:方法的覆蓋與重載的區(qū)別方法的覆蓋與重載的區(qū)別方法的覆蓋是子類和父類之間的關(guān)系,而重載是同一類方法的覆蓋是子類和父類之間的關(guān)系,而重載是同一類內(nèi)部多個(gè)方法間的關(guān)系內(nèi)部多個(gè)方法間的關(guān)系方法的覆蓋普通是兩個(gè)方法間的,而重載時(shí)能夠有多個(gè)方法的覆蓋普通是兩個(gè)方法間的,而重載時(shí)能夠有多個(gè)重載方法重載方法覆蓋的方法有一樣的方法名和形參表,而重載的方法只覆蓋的方法有一樣的方法名和形參表,而重載的方法只能有一樣的方法名,不能有一樣的形參表
11、能有一樣的方法名,不能有一樣的形參表覆蓋時(shí)區(qū)分方法的是根據(jù)調(diào)用他的對(duì)象,而重載是根據(jù)覆蓋時(shí)區(qū)分方法的是根據(jù)調(diào)用他的對(duì)象,而重載是根據(jù)形參來(lái)決議調(diào)用的是哪個(gè)方法形參來(lái)決議調(diào)用的是哪個(gè)方法用用final修飾的方法是不能被子類覆蓋的,只能被重載修飾的方法是不能被子類覆蓋的,只能被重載public class Detergent extends Cleanserpublic void scrub()append(Detergent.scrub(); super.scrub(); public void foam()append(foam();public static void main(String
12、 arg)Detergent x=new Detergent();System.out.println(Subclass has :);x.dilute();x.scrub();x.foam();x.print();System.out.println(Super class has:); Cleanser.main(arg);class Cleanserprivate String s=new String(Cleaner);public void append(String a)s=s+ +a ;public void dilute()append(dilute();public void
13、 apply()append(apply();public void scrub()append(scrub();public void print()System.out.println(s);public static void main(String args)Cleanser x=new Cleanser();x.dilute();x.apply();x.scrub();x.print(); 特殊援用特殊援用:this和和super this this用來(lái)援用當(dāng)前對(duì)象中的變量和方法用來(lái)援用當(dāng)前對(duì)象中的變量和方法.有些有些時(shí)候可以省略時(shí)候可以省略. super super用來(lái)援用父類中的
14、方法和變量,主要用來(lái)援用父類中的方法和變量,主要是被覆蓋了的變量或者方法是被覆蓋了的變量或者方法.不可省略不可省略.演示演示this和和super的運(yùn)用的運(yùn)用public class InheritDemo3 extends SuperClass float a =4f; public void print() int a =5; super.print(); System.out.println(InheritDemo2); System.out.println(a); System.out.println(this.a); System.out.println(super.a); publ
15、ic static void main(String args) InheritDemo3 id3 = new InheritDemo3(); id3.print(); /InheritDemo3.java/演示演示this和和super關(guān)鍵字的運(yùn)用關(guān)鍵字的運(yùn)用class SuperClass int a=3; public void print() System.out.println(SuperClass); 運(yùn)轉(zhuǎn)結(jié)果運(yùn)轉(zhuǎn)結(jié)果:SuperClassInheritDemo354.03public class Testthisprivate int i=0;Testthis increment
16、()i+;return this;void print()System.out.println(i=+i);public static void main (String args)Testthis x=new Testthis();x.increment().increment().increment().print();構(gòu)造函數(shù)的承繼和重載構(gòu)造函數(shù)的承繼和重載構(gòu)造函數(shù)的重載:構(gòu)造函數(shù)的重載: 目的:以不同的方法對(duì)類進(jìn)展初始化目的:以不同的方法對(duì)類進(jìn)展初始化注:構(gòu)造函數(shù)間可以相互調(diào)用,調(diào)用其他構(gòu)造函數(shù)時(shí),注:構(gòu)造函數(shù)間可以相互調(diào)用,調(diào)用其他構(gòu)造函數(shù)時(shí),必需用必需用this 替代函數(shù)名,這時(shí)的
17、替代函數(shù)名,這時(shí)的this并不代表地址,只并不代表地址,只是用來(lái)表示構(gòu)造函數(shù)的稱號(hào)。是用來(lái)表示構(gòu)造函數(shù)的稱號(hào)。public class Testthis2 Testthis2() this(5,7f); Testthis2(float f) System.out.println(f=+f); Testthis2(int i,float f) this(f); System.out.println(i=+i); System.out.println(i+f=+(i+f); public static void main(String ar)Testthis2 this2=new Testthis
18、2();構(gòu)造函數(shù)的承繼:構(gòu)造函數(shù)的承繼: 子類只承繼父類的默許構(gòu)造函數(shù),既無(wú)形參構(gòu)造函數(shù),子類只承繼父類的默許構(gòu)造函數(shù),既無(wú)形參構(gòu)造函數(shù),并且在創(chuàng)建對(duì)象時(shí)先調(diào)用這個(gè)構(gòu)造函數(shù)對(duì)對(duì)象進(jìn)展初并且在創(chuàng)建對(duì)象時(shí)先調(diào)用這個(gè)構(gòu)造函數(shù)對(duì)對(duì)象進(jìn)展初始化,然后再調(diào)用子類本人定義的構(gòu)造函數(shù),假設(shè)父始化,然后再調(diào)用子類本人定義的構(gòu)造函數(shù),假設(shè)父類沒(méi)有默許構(gòu)造函數(shù),那子類將不能從父類承繼到任類沒(méi)有默許構(gòu)造函數(shù),那子類將不能從父類承繼到任何構(gòu)造函數(shù),假設(shè)父類沒(méi)有定義默許構(gòu)造函數(shù),那么何構(gòu)造函數(shù),假設(shè)父類沒(méi)有定義默許構(gòu)造函數(shù),那么子類也不能定義本人的無(wú)參數(shù)構(gòu)造函數(shù)。假設(shè)子類想子類也不能定義本人的無(wú)參數(shù)構(gòu)造函數(shù)。假設(shè)子類想調(diào)
19、用父類的非默許構(gòu)造函數(shù),必需用調(diào)用父類的非默許構(gòu)造函數(shù),必需用super 來(lái)實(shí)現(xiàn)。子來(lái)實(shí)現(xiàn)。子類的構(gòu)造函數(shù)的形參表只能運(yùn)用父類構(gòu)造函數(shù)中用過(guò)類的構(gòu)造函數(shù)的形參表只能運(yùn)用父類構(gòu)造函數(shù)中用過(guò)的形參表,或者是對(duì)他的擴(kuò)展的形參表,或者是對(duì)他的擴(kuò)展 class studentint a;int b;student (int x,int y)a=x;b=y;public class student1 extends studentint c;student1(int m,int n,int z)super(m,n);c=a+b+z;public static void main (String arg)s
20、tudent1 s1=new student1(3,4,5);System.out.println(s1.c);最終類和最終成員最終類和最終成員final最終類:用最終類:用final修飾的類不能再有子類修飾的類不能再有子類最終方法:用最終方法:用final 修飾的方法是不能被該類的子類所重修飾的方法是不能被該類的子類所重載的方法載的方法最終屬性:常量最終屬性:常量對(duì)象在承繼關(guān)系中改動(dòng)對(duì)象在承繼關(guān)系中改動(dòng)Java語(yǔ)法規(guī)定:語(yǔ)法規(guī)定: 子類實(shí)例可以被當(dāng)作父類的一個(gè)對(duì)象運(yùn)用,而父類實(shí)子類實(shí)例可以被當(dāng)作父類的一個(gè)對(duì)象運(yùn)用,而父類實(shí)例不能被當(dāng)作子類的一個(gè)對(duì)象運(yùn)用例不能被當(dāng)作子類的一個(gè)對(duì)象運(yùn)用 假設(shè)一個(gè)
21、被父類對(duì)象經(jīng)過(guò)賦值指向的地址是子類對(duì)象假設(shè)一個(gè)被父類對(duì)象經(jīng)過(guò)賦值指向的地址是子類對(duì)象所在的地址,按照前一條準(zhǔn)那么,這個(gè)對(duì)象依然是父所在的地址,按照前一條準(zhǔn)那么,這個(gè)對(duì)象依然是父類的對(duì)象,但它可以經(jīng)過(guò)強(qiáng)迫類型轉(zhuǎn)換成子類對(duì)象,類的對(duì)象,但它可以經(jīng)過(guò)強(qiáng)迫類型轉(zhuǎn)換成子類對(duì)象,這種轉(zhuǎn)換只能用在對(duì)象間賦值時(shí),不能單獨(dú)運(yùn)用強(qiáng)迫這種轉(zhuǎn)換只能用在對(duì)象間賦值時(shí),不能單獨(dú)運(yùn)用強(qiáng)迫轉(zhuǎn)換轉(zhuǎn)換class SuperClassprivate int x=100;public int getx()return x;class Subbie extends SuperClassprivate int y=200;public int gety() return y;public class ObjectConvert public static void main(String arg) SuperClass su
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村土地流轉(zhuǎn)風(fēng)險(xiǎn)評(píng)估與保障協(xié)議
- 無(wú)人駕駛技術(shù)投資協(xié)議
- 汽車租賃長(zhǎng)租合同
- 公司股份改制方案設(shè)計(jì)報(bào)告
- 農(nóng)村綠化景觀改造施工協(xié)議
- 水務(wù)工程聯(lián)合運(yùn)營(yíng)合作協(xié)議
- 小英雄雨來(lái)成長(zhǎng)征文
- 國(guó)際貿(mào)易市場(chǎng)走勢(shì)預(yù)測(cè)分析表
- 迪士尼動(dòng)畫海洋奇緣觀后感
- 高考數(shù)學(xué)專題06四邊形的綜合問(wèn)題測(cè)試題
- 2024年度doors入門培訓(xùn)教程pdf
- JTT589-2004 水泥混凝土路面嵌縫密封材料
- (高清版)TDT 1042-2013 土地整治工程施工監(jiān)理規(guī)范
- 中風(fēng)患者的護(hù)理及康復(fù)指南培訓(xùn)
- 數(shù)據(jù)中心運(yùn)維解決方案
- 滁州城市職業(yè)學(xué)院?jiǎn)握小堵殬I(yè)技能測(cè)試》參考試題庫(kù)(含答案)
- 基于單片機(jī)控制的充電樁設(shè)計(jì)
- SB-T 11238-2023 報(bào)廢電動(dòng)汽車回收拆解技術(shù)要求
- 鋰電池正極材料行業(yè)分析
- 國(guó)家級(jí)省級(jí)化工園區(qū)列表
- 肩關(guān)節(jié)脫位手法復(fù)位課件
評(píng)論
0/150
提交評(píng)論