版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
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對象 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) 子類無條件繼承父類的不含參數(shù)的構(gòu)造方法。子類無條件繼承父類的不含參數(shù)的構(gòu)造方法。(2) 如果
5、子類自己沒有構(gòu)造方法,則它將繼承父類的如果子類自己沒有構(gòu)造方法,則它將繼承父類的無參數(shù)構(gòu)造方法作為自己的構(gòu)造方法;如果子類無參數(shù)構(gòu)造方法作為自己的構(gòu)造方法;如果子類自己定義了構(gòu)造方法,則在創(chuàng)建新對象時(shí),它將自己定義了構(gòu)造方法,則在創(chuàng)建新對象時(shí),它將先執(zhí)行繼承自父類的無參數(shù)構(gòu)造方法,然后再執(zhí)先執(zhí)行繼承自父類的無參數(shù)構(gòu)造方法,然后再執(zhí)行自己的構(gòu)造方法。行自己的構(gòu)造方法。(3) 父類的含參數(shù)構(gòu)造方法,子類可以通過在自己構(gòu)父類的含參數(shù)構(gòu)造方法,子類可以通過在自己構(gòu)造方法中使用造方法中使用super關(guān)鍵字來調(diào)用,但這個(gè)調(diào)用關(guān)鍵字來調(diào)用,但這個(gè)調(diào)用語句必須是子類構(gòu)造方法的第一個(gè)可執(zhí)行語句。語句必須是子類構(gòu)
6、造方法的第一個(gè)可執(zhí)行語句。/ 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對象 (四)this和s
7、uper(四)this和super this和和super是常用來指代父類對象是常用來指代父類對象和子類對象的關(guān)鍵字。和子類對象的關(guān)鍵字。 this表示的是表示的是當(dāng)前對象本身,當(dāng)前對象本身,this代表了當(dāng)前對象代表了當(dāng)前對象的一個(gè)引用的一個(gè)引用,它僅僅是對象的另一個(gè)名它僅僅是對象的另一個(gè)名字。利用字。利用this可以調(diào)用當(dāng)前對象的方可以調(diào)用當(dāng)前對象的方法或使用當(dāng)前對象的域。法或使用當(dāng)前對象的域。super表示的表示的是當(dāng)前對象的直接父類對象,是當(dāng)前是當(dāng)前對象的直接父類對象,是當(dāng)前對象的直接父類對象的引用。對象的直接父類對象的引用。/ 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對象 二、多態(tài)多態(tài)(一)多態(tài)的含義(一)多態(tài)的含義 所謂所謂多態(tài)多態(tài),是指一個(gè)程序,是指一個(gè)程序中同名的不同方法共存的情況。中同名的不同方法共存的
9、情況。面向?qū)ο蟮某绦蛑卸鄳B(tài)的情況面向?qū)ο蟮某绦蛑卸鄳B(tài)的情況有多種,可以通過子類對父類有多種,可以通過子類對父類方法的覆蓋實(shí)現(xiàn)多態(tài),也可以方法的覆蓋實(shí)現(xiàn)多態(tài),也可以利用重載在同一個(gè)類中定義多利用重載在同一個(gè)類中定義多個(gè)同名的不同方法。個(gè)同名的不同方法。(二)覆蓋與隱藏(二)覆蓋與隱藏 子類對繼承自父類的方法的重子類對繼承自父類的方法的重新定義,就稱為方法的覆蓋新定義,就稱為方法的覆蓋(overload)。 子類重新定義一個(gè)與從父類那子類重新定義一個(gè)與從父類那里繼承來的域變量完全相同的變里繼承來的域變量完全相同的變量,稱為域的隱藏。量,稱為域的隱藏。穿衣穿衣膚色膚色/ 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(); (三)重載(三)重載 方法的重載是指類對自身已有的同名方法的方法的重載是指類對自身已有的同名方法的重新定義。多個(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)的類和接口的集合,它可以提供訪問保護(hù)和名稱空間管它可以提供訪問保護(hù)和名稱空間管理。包的概念類似于理。包的概念類似于windows操作操作系統(tǒng)中的文件夾(目錄)。包是類系統(tǒng)中的文件夾(目錄)。包是類的集合,引入包的機(jī)制是為了避免的集合,引入包的機(jī)制是為了避免類名的沖突,同時(shí)使得各個(gè)類的層類名的沖突,同時(shí)使得各個(gè)類的層次結(jié)構(gòu)分明。次結(jié)構(gòu)分明。 java語言中的類和接口是各種包的語言中的類和接口是各種包的成員,每個(gè)集合是一個(gè)包,合稱為成員,每個(gè)集合是一個(gè)包,合稱為“類庫類庫”。(二 )創(chuàng)建包(二)創(chuàng)建包package語句的要求:語句的要求:對于
23、將要包含到包中的類,要求對于將要包含到包中的類,要求它的代碼必須它的代碼必須和包中其它文件在同一個(gè)目錄中。和包中其它文件在同一個(gè)目錄中。package語句必須是文件中的第一個(gè)語句。在語句必須是文件中的第一個(gè)語句。在package語句之前除了空白和注釋以外不能有語句之前除了空白和注釋以外不能有任何東西。任何東西。/ 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è)有名稱的方法定義的集合,是用來實(shí)現(xiàn)類間是用來實(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ī)定,所以接口的成員變量也可以沒有任何修飾符,其認(rèn)的規(guī)定,所以接口的成員變量也可以沒有任何修飾符,其作用是完全一樣的。接口的抽象方法必須是作用是完全一樣的。接口的抽象方法必須是public和和abstract,這也是這也是java系統(tǒng)默認(rèn)的規(guī)定,所以接口的抽象方法也可以沒系統(tǒng)默認(rèn)的規(guī)定,所以接口的抽象方法也可以沒有任何修飾符,其作用是完全一樣的。有任何修飾符,其作用是完全一樣的。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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024私家花園景觀綠化工程施工合同
- 2024辦公樓轉(zhuǎn)租合同
- 2024設(shè)備運(yùn)輸合同正規(guī)范本
- 2024學(xué)校食堂委托服務(wù)合同
- 數(shù)字化農(nóng)業(yè)項(xiàng)目的驗(yàn)收與后期運(yùn)營
- 大數(shù)據(jù)智能決策模型在數(shù)字化農(nóng)業(yè)中的構(gòu)建與優(yōu)化
- 蘇州科技大學(xué)天平學(xué)院《應(yīng)用統(tǒng)計(jì)》2021-2022學(xué)年第一學(xué)期期末試卷
- 《端午鴨蛋曉南講》課件
- 2024房屋的合同協(xié)議書格式
- 2024年中外合作經(jīng)營企業(yè)合同范本
- GB/T 25356-2024機(jī)場道面除冰防冰液
- 18 《瀏覽數(shù)字博物館》(教學(xué)設(shè)計(jì)) 五年級(jí)信息技術(shù)武漢版
- 期中測試卷(1-4單元)試題-2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)上冊
- 建筑工程項(xiàng)目中的精益建造和可持續(xù)發(fā)展
- 大國三農(nóng)II-農(nóng)業(yè)科技版智慧樹知到期末考試答案章節(jié)答案2024年中國農(nóng)業(yè)大學(xué)
- (新版)網(wǎng)約配送員職業(yè)技能競賽理論考試題庫500題(含答案)
- 綠化養(yǎng)護(hù)服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 高考生物選擇性必修1穩(wěn)態(tài)與調(diào)節(jié)基礎(chǔ)知識(shí)填空默寫(每天打卡)
- 專題12 應(yīng)用文寫作-【中職專用】備戰(zhàn)2025年對口高考語文題型專練 (解析版)
- 代孕合同范本
- 供暖管道改造工程施工方案
評論
0/150
提交評論