版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第9章 抽象類和接口,面向對象技術,2,學習目標,設計并使用抽象類 Calendar類與GregorianCalendar類 聲明接口模擬多繼承關系 使用Comparable接口定義自然順序 了解抽象類與接口的異同 聲明自定義接口 Cloneable接口 包裝類 創(chuàng)建一般的排序方法 JDK1.5 基本數據類型與包裝類之間自動轉換,面向對象技術,3,9.1 引言,抽象類(abstract class)是指其表達的概念非常抽象, 以至于它沒有具體的實例. 從幾個類中派生出一個子類稱為 “多重繼承”. Java的類不支持多重繼承, 稱為 “單繼承”. Java中可以使用接口(interface)得到
2、多重繼承的效果.,面向對象技術,4,9.2 抽象類,抽象方法: 只有方法頭沒有方法體.用abstract修飾. 抽象類: 用abstract修飾的類, 不能用new創(chuàng)建對象.,public abstract class TheAbstarctClass public abstract void abstractMethod(); ,面向對象技術,5,9.2 抽象類,什么時候需要設計并使用抽象類?,以幾何對象為例. 許多幾何對象, 如圓、矩形和圓柱等, 有很多共同的屬性和行為, 如共同的屬性: 使用特定顏色繪制, 填充或不填充; 共同的方法: 計算面積和周長等. 可以定義抽象類Geometric
3、Object表示一般的幾何對象概念, 包含共同的屬性和方法. 其他具體的幾何對象可以作為該抽象類的子類, 可以共享抽象父類中的屬性和行為.,面向對象技術,6,幾何對象問題的UML類圖,GeometricObject.java Circle.java Rectangle.java Cylinder.java,面向對象技術,7,9.2 抽象類 - 注意問題,非抽象類不能包含抽象方法. 抽象類不能用new運算符實例化, 但可以有構造方法. 包含抽象方法的類必須是抽象的, 但也允許聲明沒有抽象方法的抽象類. 具體的父類也可以派生抽象的子類. 子類可以將父類的具體方法覆蓋為抽象方法.(少用) 抽象類不能
4、創(chuàng)建對象, 但可以聲明對象引用.GeometricObject geo = new GeometricObject10; 例: 使用GeometricObject類. TestGeometricObject.java,面向對象技術,8,9.3 Calendar與GregorianCalendar,java.util.Date, 表示特定的瞬間, 精確到毫秒. java.util.Calendar, 抽象類, 為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日歷字段之間的轉換提供了一些方法, 并為操作日歷字段提供了一些方法. java.util.Gregori
5、anCalendar, 是 Calendar的一個具體子類,提供了世界上大多數國家/地區(qū)使用的標準日歷系統。,面向對象技術,9,9.4 接口,接口(interface)是一種與類相似的結構, 只包含常量和抽象方法. 接口聲明的語法修飾符 interface 接口名 /* 常量聲明 */ /* 抽象方法聲明 */ 每個接口在編譯時生成一個.class, 接口不能用new創(chuàng)建對象實例.,面向對象技術,10,9.4 接口,例: 設計一個比較兩個對象大小的一般方法.,/ interface for comparing objects, defined in java.lang package java
6、.lang; public interface Comparable public int compareTo(Object o); ,compareTo比較當前對象與參數對象的大小, 返回值: 負整數 當前對象小于參數對象 相等 正整數 當前對象大于參數對象,面向對象技術,11,9.4 接口,定義一個max方法, 使用Comparable接口.,public class Max public static Object max(Object o1, Object o2) if(Comparable o1).compareTo(o2) 0) return o1; else return o2;
7、 ,Java類庫中許多類實現了Comparable接口, 定義了自然順序,因此可以使用max方法.,String s1 = “abcdef”, s2 = “abcdee”; String s3 = (String)Max.max(s1, s2);,例如:,面向對象技術,12,9.4.1 實現接口,一個類使用implements關鍵字實現一個或多個接口.,修飾符 class 類名 implements 接口1, , 接口n /* 類體 */ ,關鍵字implements表示類繼承了后面列出的每個接口中的所有常量, 并實現接口的全部或部分方法. 所謂 “實現”是指在類中覆蓋接口中聲明的抽象方法.,
8、面向對象技術,13,9.4.1 實現接口,public class ComparableRectangle extends Rectangle implements Comparable public ComparableRectangle(double w, double h) super(w, h); public int compareTo(Object o) if (findArea() (ComparableRectangle)o).findArea() return 1; else if (findArea() (ComparableRectangle)o).findArea()
9、return -1; else return 0; ,面向對象技術,14,9.4.1 實現接口,UML圖形符號,接口,實現,ComparableRectangle r1 = new ComparableRectangle(4, 5); ComparableRectangle r1 = new ComparableRectangle(3, 6); Max.max(r1, r2);,面向對象技術,15,9.4.2 接口與抽象類,接口的數據域必須是常量; 抽象類有非常量. 接口的方法必須是抽象的; 抽象類有具體方法.,接口與抽象類的區(qū)別:,接口中常量的訪問:接口名.常量名 例如: T1.K,面向對象
10、技術,16,9.4.2 接口與抽象類,一個類可以extends一個父類, 同時implements多個接口.,public class 子類 extends 父類 implements 父接口1, , 父接口N ,一個接口可以extends多個父接口, 稱為 “子接口”.,public class 子接口 extends 父接口1, , 父接口N ,面向對象技術,17,9.4.2 接口與抽象類,interface CanFight void fight(); interface CanSwim void swim(); interface CanFly void fly(); interfac
11、e ActionList extends CanFight,CanSwim,CanFly,接口繼承的示例,問題: 在接口ActionList中有幾個方法?,面向對象技術,18,9.4.2 接口與抽象類,interface ActionList void fight(); void swim();abstract class Human implements ActionList public void swim() class Hero implements ActionList public void fight() public void swim() ,接口實現示例,問題1: 為什么Hu
12、man是抽象類而Hero是具體類? 問題2: 為什么Human和Hero中的方法都是public的?,面向對象技術,19,9.4.2 接口與抽象類接口類型引用,1.可以使用接口類型聲明的引用訪問任何實現了該接口的具體類的對象.,2.使用接口類型的引用只能訪問類中實現的屬于該接口的方法.,interface CanFly void fly(); interface CanRead void read(); class Hero implements CanFly,CanRead public void fly() System.out.println(fly!); public void rea
13、d() System.out.println(read!); CanFly f = new Hero(); / 正確 CanRead r = new Hero(); / 正確 f.fly(); / 正確! f.read(); / 錯誤! 不能訪問!,面向對象技術,20,9.4.3 創(chuàng)建自定義接口的例子,public interface Edible public String howToEat(); ,class Animal class Chicken extends Animal implements Edible public String howToEat() return “Fry
14、it”; ,class Fruit implements Edible public String howToEat() return “Eat it Fresh”; ,class Apple extends Fruit public String howToEat() return “Make apple cider”; ,class Orange extends Fruit public String howToEat() return “Make orange juice”; ,面向對象技術,21,9.4.4 可克隆接口Cloneable,Cloneable接口的定義如下:,packag
15、e java.lang; public interface Cloneable ,主體為空的接口稱為 “標記接口”. 標記接口用于說明實現它的類具有某種必備的特性. Cloneable接口說明實現了它的類是可復制的, 即該類的對象可以使用clone()方法進行復制. Java類庫中許多類均實現了Cloneable接口.,面向對象技術,22,9.4.4 可克隆接口Cloneable,例如: Calendar cal1 = new GregorianCalendar(2003, 2, 1); Calendar cal2 = (Calendar)cal1.clone(); System.out.pr
16、intln(“cal1 = cal2 是 ” + (cal1 = cal2); System.out.println(“cal1.equals(cal2) 是 ” + cal1.equals(cal2);,輸出結果為: cal1 = cal2 是 false cal1.equals(cal2) 是 true,面向對象技術,23,9.4.4 可克隆接口Cloneable,自定義實現復制的類, 必須滿足以下2點: 1. 該類必須實現java.lang.Cloneable接口. 2. 該類必須覆蓋Object類的clone方法.,Object類中的clone方法的定義如下: protected native Object Cloneable() throws CloneNotSupportedException;,覆蓋該方法時, 需要將protected改為public, 并在覆蓋方法中使用super.clone()調用父類的復制方法.,講解例子: House.java,面向對象技術,24,9.4.4 可克隆接口Cloneable,House.java中實現的是 “淺復制”, 而不是 “深復制”.,(1) House house1 =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 一年級數學蘇教版元角分
- 一年級入學常規(guī)教育
- 《洋快餐與健康飲食》課件
- 【大學課件】發(fā)動機的換氣過程
- 單位管理制度展示合集人力資源管理篇十篇
- 單位管理制度品讀選集職工管理十篇
- 兒童電腦啟蒙機行業(yè)深度研究報告
- 中國服務器行業(yè)市場前瞻與投資戰(zhàn)略規(guī)劃分析報告
- 殯儀館墓地建設項目可行性研究報告
- 廣德縣二手車交易市場建設可行性論證報告
- 供應鏈金融大數據平臺商業(yè)計劃書課件
- DB3302-T 1015-2022 城市道路清掃保潔作業(yè)規(guī)范
- 管線探測技術介紹
- 南醫(yī)大藥用植物學實驗指導14被子植物(四):傘形科、唇形科、馬鞭草科、茜草科
- 2023年新改版教科版四年級下冊科學練習題(一課一練+單元+期中+期末)
- 手術室提高患者術中保溫措施的執(zhí)行率PDCA課件
- 醫(yī)院外科腸梗阻出院小結范文
- 2023年海南省三支一扶考試真題
- 風機支吊架計算表
- 化妝品中的植物活性成分
- 基本事實要素表
評論
0/150
提交評論