




已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第 5 章 繼承與多態(tài),主要內容: 繼承 多態(tài) 接口和包,繼 承,繼承:子類利用父類中定義的方法和變量就像它們屬于子類本身一樣; (包括父類的私有屬性、私有方法,但不可見); 單重繼承:一個類只能有一個父類(Java、C#、VC+); 多重繼承:一個類可以有多個父類(標準C+);,圖 5-1 各種電話卡類及其間繼承關系,繼承的 優(yōu)點、目的,優(yōu)點:更有效地組織程序結構,明確類間關系; 目的:使程序結構清晰,提高開發(fā)效率,降低編碼和維護工作量。,派 生 子 類,例5-1PhoneCard 類及其派生子類 abstract class PhoneCard abstract class None_Number_PhoneCard extends PnoneCard abstract class Number_PhoneCard extends PnoneCard 問題:第二行、第三行的類為什么是抽象類,能否去掉 abstract 關鍵字?,域 的 繼 承,子類繼承(擁用)父類的所有非私有(P9192頁各類擁有的域);,域 的 隱 藏,子類重新定義一個從父類繼承來的域變量(可以具有不同類型),稱為域的隱藏(指新定義的域變量隱藏了父類的同名變量)。 舉例:例5-2的簡化版;,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(),問題:以下程序訪問的是父類還是子類?,要點: 1)被隱藏的父類域在子類對象中仍占有獨立的內存空間; 2)子類可通過 super 關鍵字或繼承自父類的方法訪問或處理繼承自父類的域。,方法的 繼承 與 覆蓋,繼承:子類可繼承父類的所有非私有方法; 覆蓋(Override):子類重新定義與父類同名的方法(指非靜態(tài)方法,要求方法名、返回值和參數(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; ,/測試 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,對當前對象的引用; 作用:1)調用當前對象的方法或域; 如:class Point int x = 0, y = 0 ; void move(int x, int y) this.x += x ; this.y += y ; 2)作為參數(shù)傳遞給其他對象或方法 如: input . addActionListener ( this ) ;,super 對當前對象的父類對象的引用; 作用:1)在構造函數(shù)定義中用 super(參數(shù)列表) 調用父類的構造函數(shù); public class apple extends fruits public apple(int price) super(price); 2)用super . 域名 引用父類的域; 例5-5 testSuper.java(第100頁) 問題:第六行:my200.balance = 50是訪問的哪一個類的balance? 第七行:my200.getBalance()是訪問的父類還是子類的函數(shù)?訪問的是父類還是子類的變量?,class SuperClass int x; . class SubClass extends SuperClass int y; . ,父類對象與子類對象的轉換,Public class UseSuperSub SuperClass sc,sc_ref; SubClass sb,sb_ref; sc = new SuperClass(); sb = new SubClass(); sc_ref = sb; / 對還是錯? / 父類引用可以指向子類對象; sb_ref = sc; / 對還是錯? / 錯,子類對象不能賦給父類引用;,class SuperClass int x; . ,class SubClass extends SuperClass int y; . ,int a = sc_ref.x; / 對或錯? / 對,以子類對象作為實際參數(shù)訪問父類變量; sb_ref = (SubClass) sc_ref;/對或錯? / 對,父類引用強制轉換成子類引用; sb_ref = (SubClass)sc; / 對或錯? / 編譯通過,但接著用sb_ref.y則錯; ,class SuperClass int x; . ,class SubClass extends SuperClass int y; . ,父類對象與子類對象的轉換 子類對象可以看作是其父類的對象; 父類對象不能被當作是其某一個子類的對象; 如果某個方法的形式參數(shù)是父類對象,可以使用子類對象作為實際參數(shù); 如果父類對象引用指向的實際是子類對象,可以采用強制類型轉換將父類對象引用轉化成子類對象引用;,引例: 函數(shù)功能:取絕對值(每一種類型對應一個函數(shù)) 整數(shù): int i_abs(int i); 單精度: float f_abs(float f); 雙精度: double d_abs(double d); 面向對象: Math.abs( int i ); Math.abs( float f ); Math.abs( double d );,多態(tài) ( polymophism ),多態(tài) ( polymophism ),指的是一個程序(在同一個類或不同類中)包含多個名稱相同、但功能或具體實現(xiàn)不同的方法; 主要通過方法的覆蓋(不同類)、重載(同一類)實現(xiàn);,電話卡 域:剩余金額 方法:撥打電話 查詢金額,無卡號電話卡 域:電話機型號 方法:獲得 電話機型號,有卡號電話卡 域:卡號,密碼, 接入號碼,接通 方法:登錄交換機,IP 卡 域:有效時間 方法:撥打電話,200 卡 域:附加費用 方法:撥打電話 修改密碼,電話 IC 卡 方法:撥打電話,電話磁卡 域:使用地域 方法:撥打電話,繼承,繼承,繼承,繼承,繼承,繼承,撥打電話函數(shù)在各子類中得到覆蓋,同一個類中定義多個同名的方法(條件:形式參數(shù)個數(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)點: 1)提高程序的簡潔性; 2)通過接口操縱對象; P104/例5-6TestOverride.java 問題:這個例子是重載還是覆蓋?在哪兩個函數(shù)體現(xiàn)? P51 / boolean performDial() P63/ boolean performDial(long cn, int pass),構造函數(shù) 重載,同一類中存在多個具有不同參數(shù)列表的構造函數(shù); 例:P107;(參數(shù)的數(shù)目、類型、順序不同) 例:P108;(構造函數(shù)的互相調用) 目的:滿足對象的不同初始化需求。,構造函數(shù) 繼承,子類構造函數(shù)總是先調用父類的構造函數(shù); 原則: 子類繼承父類無參構造函數(shù); 子類未顯式地調用父類的構造函數(shù),實則先調用父類的無參數(shù)構造函數(shù); 子類顯示調用父類的帶參數(shù)構造函數(shù)(第一句);,設計總結 不定義構造函數(shù)(缺省構造函數(shù)); 定義構造函數(shù),并調用父類的帶參構造函數(shù); D200_Card( long cn, int pass, double b, double a) super(cn, pass, b);/必須是第一句 additoryFee = a; ,重載,實現(xiàn)多層次對象初始化; D200_Card( long cn, int pass, double a) D200_Card( long cn, int pass, double b, double a) P110/例5-7 ConstructorOverride.java問題:共調用了幾個構造函數(shù)?,包 package 包名; 例 package A ; package A.B ; 作用: 默認的訪問規(guī)則:在同一程序包中出現(xiàn)的類才可以直接使用它的數(shù)據(jù)和方法。 組織和管理文件的方式:用以存放該包中所有類文件(. Class);,包 的引用,1) 使用包名、類名前綴 如:class myApplet extends java.applet.Applet; java.awt.Button btn = new java.awt.Button(“啟動”) ; 注:此方式是完整引用形式,但程序書寫不簡潔; 2) 加載需要使用的類(以后的程序可采用省略的書寫方式) 如: import java.applet.Applet; class myApplet extends Applet;,3) 加載整個包 如: import java . applet .* ; 假設有兩個類: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é)碼文件路徑(實驗一); (1)通過 autoexec.bat 文件或 DOS 命令設置,如: set CLASSPATH= . ; c:jdk1.2lib ; c:jdk1.2lib.classes.zip ; 其中,用“;”號隔開的各部分就是可能的路徑。,5.7 接口(interface) 定義:用來實現(xiàn)若干特定功能的一組對外接口和規(guī)范; 屬性:只能是常量; 方法:只能是抽象方法; 目的:實現(xiàn)多重繼承;,聲明 接口 接口的特征:由常量和抽象方法組成的特殊類; 語法: 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 光纖新型結構設計考核試卷
- 建筑材批發(fā)商市場渠道營銷策略考核試卷
- 毛皮制品的數(shù)字化供應鏈考核試卷
- 味精企業(yè)的品牌形象塑造與傳播考核試卷
- 娛樂市場營銷策略與實施考核試卷
- 小麥加工中的谷物營養(yǎng)成分保持技術考核試卷
- 會展旅游與目的地營銷考核試卷
- 橡膠制品在工業(yè)機器人的靈活性考核試卷
- 寵物寄托中心寵物寄養(yǎng)服務法律援助平臺搭建考核試卷
- 智能車載語音交互技術考核試卷
- 天津市建筑安全員-C證考試題庫
- 2025年皖北衛(wèi)生職業(yè)學院單招職業(yè)適應性測試題庫參考答案
- 小學生春耕教學課件
- 2024年南信語文數(shù)學試卷(含答案)
- 2024年重慶市集中選調應屆大學畢業(yè)生到基層工作考試真題
- 2025年個人投資合同電子版模板
- 車輛掛靠協(xié)議書
- 2025年湖南交通職業(yè)技術學院單招職業(yè)適應性測試題庫1套
- 2017年公務員多省聯(lián)考《申論》真題(吉林甲級卷)及參考答案(含詳細解析)
- 一年級下冊健康成長教案
- 電力系統(tǒng)老化問題及其隱患解決方案研究報告發(fā)布
評論
0/150
提交評論