




已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第 5 章 繼承與多態(tài),主要內(nèi)容: 繼承 多態(tài) 接口和包,繼 承,繼承:子類利用父類中定義的方法和變量就像它們屬于子類本身一樣; (包括父類的私有屬性、私有方法,但不可見(jiàn)); 單重繼承:一個(gè)類只能有一個(gè)父類(Java、C#、VC+); 多重繼承:一個(gè)類可以有多個(gè)父類(標(biāo)準(zhǔn)C+);,圖 5-1 各種電話卡類及其間繼承關(guān)系,繼承的 優(yōu)點(diǎn)、目的,優(yōu)點(diǎn):更有效地組織程序結(jié)構(gòu),明確類間關(guān)系; 目的:使程序結(jié)構(gòu)清晰,提高開(kāi)發(fā)效率,降低編碼和維護(hù)工作量。,派 生 子 類,例5-1PhoneCard 類及其派生子類 abstract class PhoneCard abstract class None_Number_PhoneCard extends PnoneCard abstract class Number_PhoneCard extends PnoneCard 問(wèn)題:第二行、第三行的類為什么是抽象類,能否去掉 abstract 關(guān)鍵字?,域 的 繼 承,子類繼承(擁用)父類的所有非私有(P9192頁(yè)各類擁有的域);,域 的 隱 藏,子類重新定義一個(gè)從父類繼承來(lái)的域變量(可以具有不同類型),稱為域的隱藏(指新定義的域變量隱藏了父類的同名變量)。 舉例:例5-2的簡(jiǎn)化版;,abstract class A double m_a; abstract double sub(); double get() return m_a; class B extends A double m_a; double sub() m_a -=1; return m_a; double super_sub() super.m_a -=1; return super.m_a; ,public class Application1 public static void main(String args) B b = new B(); b.m_a = 100; System.out.println(b.get(); System.out.println(b.sub(); System.out.println(b.super_sub(); 輸出為: 0 99 -1;,b.m_a = 100; b.get() b.sub() b.super_sub(),問(wèn)題:以下程序訪問(wèn)的是父類還是子類?,要點(diǎn): 1)被隱藏的父類域在子類對(duì)象中仍占有獨(dú)立的內(nèi)存空間; 2)子類可通過(guò) super 關(guān)鍵字或繼承自父類的方法訪問(wèn)或處理繼承自父類的域。,方法的 繼承 與 覆蓋,繼承:子類可繼承父類的所有非私有方法; 覆蓋(Override):子類重新定義與父類同名的方法(指非靜態(tài)方法,要求方法名、返回值和參數(shù)列表完全相同); 如果子類的非抽象方法覆蓋了父類的抽象方法,稱子類“實(shí)現(xiàn)”了父類的抽象方法。,abstract class A double m_a; abstract double sub(); double get() return m_a; class B extends A double m_a; double sub() m_a -=1; return m_a; double super_sub() super.m_a -=1; return super.m_a; double get() return m_a; ,/測(cè)試 public class Application1 public static void main (String args) B b = new B(); b.m_a = 100; System.out.println(b.get(); 輸出為:100,例域的隱藏、方法覆蓋、方法重載 class Point / 父類 int x = 0, y = 0 ; void move(int dx, int dy) x += dx ; y += dy ; class RealPoint extends Point / 子類 float x = 0.0f, y = 0.0f ; / 域的隱藏 void move(int dx, int dy) / 方法的覆蓋 System.out.println(“subclasss move“); move(float)dx, (float)dy); void move(float dx, float dy) / 方法的重載 x += dx; y += dy; ,public class Application1 public static void main(String args) RealPoint rp = new RealPoint(); System.out.println(“x:“ + rp.x + “ y:“ + rp.y); rp.move(1,1); System.out.println(“x:“ + rp.x + “ y:“ + rp.y); 輸出: x:0.0 y:0.0 subclasss move x:1.0 y:1.0,this,對(duì)當(dāng)前對(duì)象的引用; 作用:1)調(diào)用當(dāng)前對(duì)象的方法或域; 如:class Point int x = 0, y = 0 ; void move(int x, int y) this.x += x ; this.y += y ; 2)作為參數(shù)傳遞給其他對(duì)象或方法 如: input . addActionListener ( this ) ;,super 對(duì)當(dāng)前對(duì)象的父類對(duì)象的引用; 作用:1)在構(gòu)造函數(shù)定義中用 super(參數(shù)列表) 調(diào)用父類的構(gòu)造函數(shù); public class apple extends fruits public apple(int price) super(price); 2)用super . 域名 引用父類的域; 例5-5 testSuper.java(第100頁(yè)) 問(wèn)題:第六行:my200.balance = 50是訪問(wèn)的哪一個(gè)類的balance? 第七行:my200.getBalance()是訪問(wèn)的父類還是子類的函數(shù)?訪問(wèn)的是父類還是子類的變量?,class SuperClass int x; . class SubClass extends SuperClass int y; . ,父類對(duì)象與子類對(duì)象的轉(zhuǎn)換,Public class UseSuperSub SuperClass sc,sc_ref; SubClass sb,sb_ref; sc = new SuperClass(); sb = new SubClass(); sc_ref = sb; / 對(duì)還是錯(cuò)? / 父類引用可以指向子類對(duì)象; sb_ref = sc; / 對(duì)還是錯(cuò)? / 錯(cuò),子類對(duì)象不能賦給父類引用;,class SuperClass int x; . ,class SubClass extends SuperClass int y; . ,int a = sc_ref.x; / 對(duì)或錯(cuò)? / 對(duì),以子類對(duì)象作為實(shí)際參數(shù)訪問(wèn)父類變量; sb_ref = (SubClass) sc_ref;/對(duì)或錯(cuò)? / 對(duì),父類引用強(qiáng)制轉(zhuǎn)換成子類引用; sb_ref = (SubClass)sc; / 對(duì)或錯(cuò)? / 編譯通過(guò),但接著用sb_ref.y則錯(cuò); ,class SuperClass int x; . ,class SubClass extends SuperClass int y; . ,父類對(duì)象與子類對(duì)象的轉(zhuǎn)換 子類對(duì)象可以看作是其父類的對(duì)象; 父類對(duì)象不能被當(dāng)作是其某一個(gè)子類的對(duì)象; 如果某個(gè)方法的形式參數(shù)是父類對(duì)象,可以使用子類對(duì)象作為實(shí)際參數(shù); 如果父類對(duì)象引用指向的實(shí)際是子類對(duì)象,可以采用強(qiáng)制類型轉(zhuǎn)換將父類對(duì)象引用轉(zhuǎn)化成子類對(duì)象引用;,引例: 函數(shù)功能:取絕對(duì)值(每一種類型對(duì)應(yīng)一個(gè)函數(shù)) 整數(shù): int i_abs(int i); 單精度: float f_abs(float f); 雙精度: double d_abs(double d); 面向?qū)ο螅?Math.abs( int i ); Math.abs( float f ); Math.abs( double d );,多態(tài) ( polymophism ),多態(tài) ( polymophism ),指的是一個(gè)程序(在同一個(gè)類或不同類中)包含多個(gè)名稱相同、但功能或具體實(shí)現(xiàn)不同的方法; 主要通過(guò)方法的覆蓋(不同類)、重載(同一類)實(shí)現(xiàn);,電話卡 域:剩余金額 方法:撥打電話 查詢金額,無(wú)卡號(hào)電話卡 域:電話機(jī)型號(hào) 方法:獲得 電話機(jī)型號(hào),有卡號(hào)電話卡 域:卡號(hào),密碼, 接入號(hào)碼,接通 方法:登錄交換機(jī),IP 卡 域:有效時(shí)間 方法:撥打電話,200 卡 域:附加費(fèi)用 方法:撥打電話 修改密碼,電話 IC 卡 方法:撥打電話,電話磁卡 域:使用地域 方法:撥打電話,繼承,繼承,繼承,繼承,繼承,繼承,撥打電話函數(shù)在各子類中得到覆蓋,同一個(gè)類中定義多個(gè)同名的方法(條件:形式參數(shù)個(gè)數(shù)、類型和順序不同); public class MyClass public static int abs(int p) return Math.abs(p); public static long abs(long p) return Math.abs(p); public static double abs(double p) return Math.abs(p); ,重載(overload),優(yōu)點(diǎn): 1)提高程序的簡(jiǎn)潔性; 2)通過(guò)接口操縱對(duì)象; P104/例5-6TestOverride.java 問(wèn)題:這個(gè)例子是重載還是覆蓋?在哪兩個(gè)函數(shù)體現(xiàn)? P51 / boolean performDial() P63/ boolean performDial(long cn, int pass),構(gòu)造函數(shù) 重載,同一類中存在多個(gè)具有不同參數(shù)列表的構(gòu)造函數(shù); 例:P107;(參數(shù)的數(shù)目、類型、順序不同) 例:P108;(構(gòu)造函數(shù)的互相調(diào)用) 目的:滿足對(duì)象的不同初始化需求。,構(gòu)造函數(shù) 繼承,子類構(gòu)造函數(shù)總是先調(diào)用父類的構(gòu)造函數(shù); 原則: 子類繼承父類無(wú)參構(gòu)造函數(shù); 子類未顯式地調(diào)用父類的構(gòu)造函數(shù),實(shí)則先調(diào)用父類的無(wú)參數(shù)構(gòu)造函數(shù); 子類顯示調(diào)用父類的帶參數(shù)構(gòu)造函數(shù)(第一句);,設(shè)計(jì)總結(jié) 不定義構(gòu)造函數(shù)(缺省構(gòu)造函數(shù)); 定義構(gòu)造函數(shù),并調(diào)用父類的帶參構(gòu)造函數(shù); D200_Card( long cn, int pass, double b, double a) super(cn, pass, b);/必須是第一句 additoryFee = a; ,重載,實(shí)現(xiàn)多層次對(duì)象初始化; D200_Card( long cn, int pass, double a) D200_Card( long cn, int pass, double b, double a) P110/例5-7 ConstructorOverride.java問(wèn)題:共調(diào)用了幾個(gè)構(gòu)造函數(shù)?,包 package 包名; 例 package A ; package A.B ; 作用: 默認(rèn)的訪問(wèn)規(guī)則:在同一程序包中出現(xiàn)的類才可以直接使用它的數(shù)據(jù)和方法。 組織和管理文件的方式:用以存放該包中所有類文件(. Class);,包 的引用,1) 使用包名、類名前綴 如:class myApplet extends java.applet.Applet; java.awt.Button btn = new java.awt.Button(“啟動(dòng)”) ; 注:此方式是完整引用形式,但程序書(shū)寫(xiě)不簡(jiǎn)潔; 2) 加載需要使用的類(以后的程序可采用省略的書(shū)寫(xiě)方式) 如: import java.applet.Applet; class myApplet extends Applet;,3) 加載整個(gè)包 如: import java . applet .* ; 假設(shè)有兩個(gè)類:java.awt.Button、 java.sw.Button; java.awt.Button btn = new java.awt.Button() ; java.sw.Button btn = new java.sw.Button() ; import java.awt.Button; Button btn = new Button() ;,CLASSPATH 環(huán)境變量 作用:指明所有缺省的類字節(jié)碼文件路徑(實(shí)驗(yàn)一); (1)通過(guò) autoexec.bat 文件或 DOS 命令設(shè)置,如: set CLASSPATH= . ; c:jdk1.2lib ; c:jdk1.2lib.classes.zip ; 其中,用“;”號(hào)隔開(kāi)的各部分就是可能的路徑。,5.7 接口(interface) 定義:用來(lái)實(shí)現(xiàn)若干特定功能的一組對(duì)外接口和規(guī)范; 屬性:只能是常量; 方法:只能是抽象方法; 目的:實(shí)現(xiàn)多重繼承;,聲明 接口 接口的特征:由常量和抽象方法組成的特殊類; 語(yǔ)法: public interface 接口名 extends 父接口名列表 / 常量域聲明 public static final 域類型 域名 = 常量表; / 抽象方法聲明 public abstract native 返回值 方法名(參數(shù)列表)throw 異常列表;,P100:系統(tǒng)接口 DataInput 的定義: public interface java.io.DataInput public abstract boolean readBoolean ( ); public abstract byte readByte ( ); public abstract char readChar ( ); public abstract Double readDouble ( ); ,P119:A
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年山西省朔州市懷仁市八年級(jí)上學(xué)期期中生物學(xué)試卷
- 2024-2025學(xué)年山東省菏澤市曹縣九年級(jí)上學(xué)期期中生物試卷
- 種植牙術(shù)后的口腔護(hù)理
- 2025中考數(shù)學(xué)沖刺搶押秘籍(廣東版)猜押02廣東卷中考數(shù)學(xué)6-10題(概率、實(shí)數(shù)的估值、二次函數(shù)圖象、分式方程解法、一次函數(shù)與不等式選擇題)(解析版)
- 2024-2025學(xué)年下學(xué)期初中語(yǔ)文統(tǒng)編版九年級(jí)期末必刷??碱}之文言文閱讀
- 高中物理功和功率課件-2024-2025學(xué)年高一下學(xué)期物理人教版(2019)必修二
- 中國(guó)青年政治學(xué)院《小組社會(huì)工作實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 山東農(nóng)業(yè)工程學(xué)院《跨文化交際學(xué)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 肺結(jié)核病人的秘密護(hù)理
- 北師版(2024)七年級(jí)下冊(cè)數(shù)學(xué)6.3用關(guān)系式表示變量之間的關(guān)系(同步課件)
- 高中英語(yǔ)必背3500單詞表完整版
- 醫(yī)師職業(yè)素養(yǎng)課件
- 電網(wǎng)工程設(shè)備材料信息參考價(jià)2025年第一季度
- Python試題庫(kù)(附參考答案)
- 高校實(shí)驗(yàn)室安全基礎(chǔ)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2023年廣東初中學(xué)業(yè)水平考試生物試卷真題(含答案)
- 高考日語(yǔ)語(yǔ)法復(fù)習(xí)之形容詞課件
- 監(jiān)理工作匯報(bào)-課件
- 鋼卷尺檢定證書(shū)
- 放到單位檔案的個(gè)人自傳
- 《湯姆˙索亞歷險(xiǎn)記》整本書(shū)導(dǎo)讀課教學(xué)設(shè)計(jì)9篇
評(píng)論
0/150
提交評(píng)論