版權(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)本節(jié)要點(diǎn)和目標(biāo)本節(jié)要點(diǎn)和目標(biāo).一、繼承二、多態(tài)三、包四、接口一、繼承繼承(一)繼承的含義(一)繼承的含義 繼承繼承實(shí)際上是存在于面向?qū)ο髮?shí)際上是存在于面向?qū)ο蟪绦蛑械膬蓚€(gè)類之間的一種關(guān)系。程序中的兩個(gè)類之間的一種關(guān)系。當(dāng)一個(gè)類獲取另一個(gè)類中所有非私當(dāng)一個(gè)類獲取另一個(gè)類中所有非私有的數(shù)據(jù)和操作的定義作為自己的有的數(shù)據(jù)和操作的定義作為自己的部分或全部成分時(shí),就稱這兩個(gè)類部分或全部成分時(shí),就稱這兩個(gè)類之間具有繼承關(guān)系。被繼承的類稱之間具有繼承關(guān)系。被繼承的類稱為父類或超類,繼承了父類或超類為父類或超類,繼承了父類或超類的所有數(shù)據(jù)和操作的類稱為子類。的所有數(shù)據(jù)和操
2、作的類稱為子類。(二)類的繼承(二)類的繼承/ appl5_1派生子類class CCircle / 定義類CCircle private double pi=3.14; private double radius; public CCircle( ) / CCircle( )構(gòu)造方法 System.out.println(CCircle( ) constructor called); public void setRadius(double r) radius=r; System.out.println(radius=+radius); public void show() System.o
3、ut.println(area=+pi*radius*radius); class CCoin extends CCircle /定義CCoin類,繼承自CCircle類 private int value; public CCoin( ) / CCoin()構(gòu)造方法 System.out.println(CCoin( ) constructor called); public void setValue(int t) value=t; System.out.println(value=+value); public class appl5_1 public static void main(
4、String args) CCoin coin=new CCoin(); / 建立CCoin對(duì)象 coin.setRadius(2.0); / 調(diào)用父類的setRadius() method coin.show(); /調(diào)用父類的show() method coin.setValue(5); / 調(diào)用子類的setValue() method (三)構(gòu)造方法的繼承(三)構(gòu)造方法的繼承子類可以繼承父類的構(gòu)造方法,構(gòu)造方法的繼承遵子類可以繼承父類的構(gòu)造方法,構(gòu)造方法的繼承遵循以下的原則:循以下的原則:(1) 子類無(wú)條件繼承父類的不含參數(shù)的構(gòu)造方法。子類無(wú)條件繼承父類的不含參數(shù)的構(gòu)造方法。(2) 如果
5、子類自己沒(méi)有構(gòu)造方法,則它將繼承父類的如果子類自己沒(méi)有構(gòu)造方法,則它將繼承父類的無(wú)參數(shù)構(gòu)造方法作為自己的構(gòu)造方法;如果子類無(wú)參數(shù)構(gòu)造方法作為自己的構(gòu)造方法;如果子類自己定義了構(gòu)造方法,則在創(chuàng)建新對(duì)象時(shí),它將自己定義了構(gòu)造方法,則在創(chuàng)建新對(duì)象時(shí),它將先執(zhí)行繼承自父類的無(wú)參數(shù)構(gòu)造方法,然后再執(zhí)先執(zhí)行繼承自父類的無(wú)參數(shù)構(gòu)造方法,然后再執(zhí)行自己的構(gòu)造方法。行自己的構(gòu)造方法。(3) 父類的含參數(shù)構(gòu)造方法,子類可以通過(guò)在自己構(gòu)父類的含參數(shù)構(gòu)造方法,子類可以通過(guò)在自己構(gòu)造方法中使用造方法中使用super關(guān)鍵字來(lái)調(diào)用,但這個(gè)調(diào)用關(guān)鍵字來(lái)調(diào)用,但這個(gè)調(diào)用語(yǔ)句必須是子類構(gòu)造方法的第一個(gè)可執(zhí)行語(yǔ)句。語(yǔ)句必須是子類構(gòu)
6、造方法的第一個(gè)可執(zhí)行語(yǔ)句。/ appl5_2構(gòu)造方法的繼承class superclass /父類int x=8; /*superclass(int y) /父類構(gòu)造方法 System.out.println(y); */ public class appl5_2 extends superclass /子類 appl5_2( ) /子類構(gòu)造方法 /super(5); System.out.println(super.x); public static void main(String args) appl5_2 a=new appl5_2( );/ 建立appl5_2對(duì)象 (四)this和s
7、uper(四)this和super this和和super是常用來(lái)指代父類對(duì)象是常用來(lái)指代父類對(duì)象和子類對(duì)象的關(guān)鍵字。和子類對(duì)象的關(guān)鍵字。 this表示的是表示的是當(dāng)前對(duì)象本身,當(dāng)前對(duì)象本身,this代表了當(dāng)前對(duì)象代表了當(dāng)前對(duì)象的一個(gè)引用的一個(gè)引用,它僅僅是對(duì)象的另一個(gè)名它僅僅是對(duì)象的另一個(gè)名字。利用字。利用this可以調(diào)用當(dāng)前對(duì)象的方可以調(diào)用當(dāng)前對(duì)象的方法或使用當(dāng)前對(duì)象的域。法或使用當(dāng)前對(duì)象的域。super表示的表示的是當(dāng)前對(duì)象的直接父類對(duì)象,是當(dāng)前是當(dāng)前對(duì)象的直接父類對(duì)象,是當(dāng)前對(duì)象的直接父類對(duì)象的引用。對(duì)象的直接父類對(duì)象的引用。/ appl5_3 this和super的使用(1)clas
8、s superclass /父類int x=8; public class appl5_3 extends superclass /子類 int y=9; appl5_3( ) /子類構(gòu)造方法 System.out.println(this.y); System.out.println(super.x); public static void main(String args) appl5_3 a=new appl5_3( );/ 建立appl5_3對(duì)象 二、多態(tài)多態(tài)(一)多態(tài)的含義(一)多態(tài)的含義 所謂所謂多態(tài)多態(tài),是指一個(gè)程序,是指一個(gè)程序中同名的不同方法共存的情況。中同名的不同方法共存的
9、情況。面向?qū)ο蟮某绦蛑卸鄳B(tài)的情況面向?qū)ο蟮某绦蛑卸鄳B(tài)的情況有多種,可以通過(guò)子類對(duì)父類有多種,可以通過(guò)子類對(duì)父類方法的覆蓋實(shí)現(xiàn)多態(tài),也可以方法的覆蓋實(shí)現(xiàn)多態(tài),也可以利用重載在同一個(gè)類中定義多利用重載在同一個(gè)類中定義多個(gè)同名的不同方法。個(gè)同名的不同方法。(二)覆蓋與隱藏(二)覆蓋與隱藏 子類對(duì)繼承自父類的方法的重子類對(duì)繼承自父類的方法的重新定義,就稱為方法的覆蓋新定義,就稱為方法的覆蓋(overload)。 子類重新定義一個(gè)與從父類那子類重新定義一個(gè)與從父類那里繼承來(lái)的域變量完全相同的變里繼承來(lái)的域變量完全相同的變量,稱為域的隱藏。量,稱為域的隱藏。穿衣穿衣膚色膚色/ appl5_4, 方法的覆蓋
10、方法的覆蓋, ,域的隱藏域的隱藏class CCircle / 父類CCircle protected double radius; protected static double pi=3.14; public CCircle(double r) radius=r; public void show( ) / 父類里的show() method System.out.println(radius=+radius); class CCoin extends CCircle / 子類CCoin private int value; public CCoin(double r,int v) sup
11、er(r); value=v; public void show( ) / 子類里的show() method System.out.println(radius= +radius+, value= +value); public class appl5_4 public static void main(String args) CCoin coin=new CCoin(2.0,5); coin.show(); (三)重載(三)重載 方法的重載是指類對(duì)自身已有的同名方法的方法的重載是指類對(duì)自身已有的同名方法的重新定義。多個(gè)方法可以享有相同的名字,但重新定義。多個(gè)方法可以享有相同的名字,但是,
12、這些方法的參數(shù)必須不同,是,這些方法的參數(shù)必須不同, 它們或是參數(shù)它們或是參數(shù)的數(shù)量不同,或是參數(shù)的類型不同。的數(shù)量不同,或是參數(shù)的類型不同。找零找零制冷制冷制熱制熱除濕除濕/ appl5_5, 方法的重載方法的重載(1)(1)class CCircle / 定義類CCircle private String color; private double pi=3.14; private double radius; public void setColor(String str) /設(shè)置color的方法 color=str; public void setRadius(double r) /設(shè)
13、置radius的方法 radius=r; public void setAll(String str, double r) color=str; / 同時(shí)設(shè)置color與radius radius=r; public void show( ) / 打印半徑、顏色與圓面積System.out.println(color=+color+, Radius=+radius);System.out.println(area=+pi*radius*radius); public class appl5_5 public static void main(String args) CCircle cir1=
14、new CCircle(); cir1.setColor(Red); / 設(shè)置cir1的color cir1.setRadius(2.0); / 設(shè)置cir1的radius cir1.show(); cir1.setAll(Blue,4.0); / 同時(shí)設(shè)置cir1的color和radius cir1.show(); / appl5_5, 方法的重載方法的重載(2)(2)class CCircle / 定義類CCircle private String color; private double pi=3.14; private double radius; public void setCi
15、rcle(String str) / 設(shè)置color成員 color=str; public void setCircle(double r) / 設(shè)置radius成員 radius=r; public void setCircle(String str, double r) color=str; / 同時(shí)設(shè)置color與radius radius=r; public void show() System.out.println(color=+color+, Radius=+radius); System.out.println(area=+pi*radius*radius); public
16、class appl5_5 public static void main(String args) CCircle cir1=new CCircle(); cir1.setCircle(“Red”); / 調(diào)用第一個(gè)setCircle() 方法 cir1.setCircle(2.0); / 調(diào)用第二個(gè)setCircle() 方法 cir1.show(); cir1.setCircle(“Blue”,4.0); / 調(diào)用第三個(gè)setCircle() 方法 cir1.show(); public void setCircle(String str) color=str;public void s
17、etCircle(double r) radius=r;public void setCircle(String str,double r) color=str; radius=r; public class appl5_5 public static void main(String args ) cir1.setCircle(“Red”); cir1.setCircle(2.0); cir1.setCircle(“Blue”,4.0); (四)構(gòu)造方法的重載(四)構(gòu)造方法的重載 構(gòu)造方法的重載是指同一構(gòu)造方法的重載是指同一個(gè)類中存在著若干個(gè)具有不個(gè)類中存在著若干個(gè)具有不同參數(shù)列表的構(gòu)造方法
18、。同參數(shù)列表的構(gòu)造方法。三、包包(一)文件的分割(一)文件的分割/appl5_6 /appl5_6 文件分割文件分割class CCircleclass CCircle public void show( ) public void show( ) System.out.println(“This is a CCircle class”); System.out.println(“This is a CCircle class”); public class appl5_6public class appl5_6 public static void main(String args ) pu
19、blic static void main(String args ) CCircle cir=new CCircle( ); CCircle cir=new CCircle( ); cir.show( ); cir.show( ); /CCircle.java,/CCircle.java,假設(shè)本文件置于假設(shè)本文件置于e:javapack1e:javapack1class CCircleclass CCirclepublic void show( )public void show( ) System.out.println(“This is a CCircle class”); System
20、.out.println(“This is a CCircle class”); /appl5_6.java,/appl5_6.java,假設(shè)本文件置于假設(shè)本文件置于e:javapack1e:javapack1public class appl5_6public class appl5_6public static void main(String args )public static void main(String args ) CCircle cir=new CCircle( ); CCircle cir=new CCircle( ); cir.show( ); cir.show( )
21、; e:javapack1e:javapack1e:javapack1 javac Ccircle.java e:javapack1 javac Ccircle.java e:javapack1 javac appl5_6.java e:javapack1 javac appl5_6.java (e:javajavac pack1app5_6.java) (e:javajavac pack1app5_6.java) e:javapack1 java appl5_6 e:javapack1 java appl5_6 This is a CCircle classThis is a CCircle
22、 class 包是一個(gè)相關(guān)的類和接口的集合,包是一個(gè)相關(guān)的類和接口的集合,它可以提供訪問(wèn)保護(hù)和名稱空間管它可以提供訪問(wèn)保護(hù)和名稱空間管理。包的概念類似于理。包的概念類似于windows操作操作系統(tǒng)中的文件夾(目錄)。包是類系統(tǒng)中的文件夾(目錄)。包是類的集合,引入包的機(jī)制是為了避免的集合,引入包的機(jī)制是為了避免類名的沖突,同時(shí)使得各個(gè)類的層類名的沖突,同時(shí)使得各個(gè)類的層次結(jié)構(gòu)分明。次結(jié)構(gòu)分明。 java語(yǔ)言中的類和接口是各種包的語(yǔ)言中的類和接口是各種包的成員,每個(gè)集合是一個(gè)包,合稱為成員,每個(gè)集合是一個(gè)包,合稱為“類庫(kù)類庫(kù)”。(二 )創(chuàng)建包(二)創(chuàng)建包package語(yǔ)句的要求:語(yǔ)句的要求:對(duì)于
23、將要包含到包中的類,要求對(duì)于將要包含到包中的類,要求它的代碼必須它的代碼必須和包中其它文件在同一個(gè)目錄中。和包中其它文件在同一個(gè)目錄中。package語(yǔ)句必須是文件中的第一個(gè)語(yǔ)句。在語(yǔ)句必須是文件中的第一個(gè)語(yǔ)句。在package語(yǔ)句之前除了空白和注釋以外不能有語(yǔ)句之前除了空白和注釋以外不能有任何東西。任何東西。/ appl5_7, package的使用文件置于在e:javapack2文件夾內(nèi)package pack2;class CCircle / CCircle類已被納入package pack2當(dāng)中 public void show( ) System.out.println(show(
24、) method called); public class appl5_7 / 將appl5_7類也納入package pack2當(dāng)中 public static void main(String args ) CCircle cir=new CCircle(); cir.show(); (三)包的引用(三 )包的引用/ CCircle.java此文件存放在pack3b文件夾內(nèi)package pack3b;public class CCircle public void show( ) System.out.println(“*); / appl5_8.java 此文件存放在pack3a文件
25、夾內(nèi)package pack3a;public class appl5_8 public static void main(String args ) pack3b.CCircle cir=new pack3b.CCircle(); cir.show(); / CCircle.java此文件存放在pack3b文件夾內(nèi)package pack3b;public class CCircle public void show( ) System.out.println(“*); / appl5_8.java 此文件存放在pack3a文件夾內(nèi)package pack3a;import pack3b.C
26、Circle;public class appl5_8 public static void main(String args ) CCircle cir=new CCircle(); cir.show(); / CCircle.java此文件存放在pack3b文件夾內(nèi)package pack3b;public class CCircle public void show( ) System.out.println(“*); / appl5_8.java 此文件存放在pack3a文件夾內(nèi)package pack3a;import pack3b.*;public class appl5_8 pu
27、blic static void main(String args ) CCircle cir=new CCircle(); cir.show(); 四、接口接口(一)接口概述(一)接口概述接口是一個(gè)有名稱的方法定義的集合,接口是一個(gè)有名稱的方法定義的集合,是用來(lái)實(shí)現(xiàn)類間是用來(lái)實(shí)現(xiàn)類間“多重繼承多重繼承”功能的功能的結(jié)構(gòu)。接口中只有常量和抽象方法。結(jié)構(gòu)。接口中只有常量和抽象方法。接口與抽象類的區(qū)別是:接口與抽象類的區(qū)別是:(1)接口的數(shù)據(jù)成員必須初始化;接口的數(shù)據(jù)成員必須初始化;(2)接口里的接口里的method必須全部都聲明成必須全部都聲明成abstract;(3)類可以實(shí)現(xiàn)許多接口,但只能
28、有一個(gè)類可以實(shí)現(xiàn)許多接口,但只能有一個(gè)超類。超類。(二)聲明接口(二)聲明接口接口的成員變量必須是接口的成員變量必須是public、static和和final,這是,這是java系統(tǒng)默系統(tǒng)默認(rèn)的規(guī)定,所以接口的成員變量也可以沒(méi)有任何修飾符,其認(rèn)的規(guī)定,所以接口的成員變量也可以沒(méi)有任何修飾符,其作用是完全一樣的。接口的抽象方法必須是作用是完全一樣的。接口的抽象方法必須是public和和abstract,這也是這也是java系統(tǒng)默認(rèn)的規(guī)定,所以接口的抽象方法也可以沒(méi)系統(tǒng)默認(rèn)的規(guī)定,所以接口的抽象方法也可以沒(méi)有任何修飾符,其作用是完全一樣的。有任何修飾符,其作用是完全一樣的。interface iS
29、hape2D / /定義接口定義接口 final double pi=3.14; / /數(shù)據(jù)成員一定要初始化數(shù)據(jù)成員一定要初始化 abstract void area( ); abstract void area( ); / /抽象方法抽象方法 (三)實(shí)現(xiàn)接口(三)實(shí)現(xiàn)接口/ appl5_9接口的實(shí)現(xiàn)接口的實(shí)現(xiàn)class CRectangle implements iShape2D / 實(shí)現(xiàn)CRectangle類 int width,height; public CRectangle(int w,int h) width=w; height=h; public void area( ) / 定義area( )的處理方式 System.out.println(area=+width*height); class CCircle implements iShape2D / 實(shí)現(xiàn)CCircle類 double radius; public CCircle(double r) radius=r; public void area(
溫馨提示
- 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)業(yè)科技成果轉(zhuǎn)化合同范本8篇
- 2025版明光幼兒園食堂改造與綠色校園建設(shè)合同4篇
- 二零二五年度平房產(chǎn)權(quán)繼承與贈(zèng)與合同范本4篇
- 二零二五年度企業(yè)員工停薪留職員工培訓(xùn)補(bǔ)貼合同
- 產(chǎn)前檢查講解
- 二零二五年度員工勞動(dòng)合同轉(zhuǎn)移至新公司員工晉升服務(wù)合同2篇
- 二零二五年度體育場(chǎng)館租賃及賽事組織合同3篇
- 二零二五版美容院美容產(chǎn)品安全檢測(cè)與認(rèn)證合同3篇
- 二零二五年度影視特效制作合同標(biāo)準(zhǔn)范本
- 2025版奶牛養(yǎng)殖場(chǎng)安全生產(chǎn)與應(yīng)急預(yù)案合同3篇
- 垃圾處理廠工程施工組織設(shè)計(jì)
- 天皰瘡患者護(hù)理
- 機(jī)電一體化系統(tǒng)設(shè)計(jì)-第5章-特性分析
- 2025年高考物理復(fù)習(xí)壓軸題:電磁感應(yīng)綜合問(wèn)題(原卷版)
- 2025年蛇年新年金蛇賀歲金蛇狂舞春添彩玉樹臨風(fēng)福滿門模板
- 《建筑制圖及陰影透視(第2版)》課件 4-直線的投影
- 2024-2030年中國(guó)IVD(體外診斷)測(cè)試行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 碎紙機(jī)設(shè)計(jì)說(shuō)明書
- 湖南省長(zhǎng)沙市青竹湖湘一外國(guó)語(yǔ)學(xué)校2021-2022學(xué)年八年級(jí)下學(xué)期期中語(yǔ)文試題
- 2024年股權(quán)代持協(xié)議經(jīng)典版(3篇)
- 四川省成都市青羊區(qū)石室聯(lián)中學(xué)2024年八年級(jí)下冊(cè)物理期末學(xué)業(yè)水平測(cè)試試題含解析
評(píng)論
0/150
提交評(píng)論