版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第9章 抽象類(lèi)和接口,面向?qū)ο蠹夹g(shù),2,學(xué)習(xí)目標(biāo),設(shè)計(jì)并使用抽象類(lèi) Calendar類(lèi)與GregorianCalendar類(lèi) 聲明接口模擬多繼承關(guān)系 使用Comparable接口定義自然順序 了解抽象類(lèi)與接口的異同 聲明自定義接口 Cloneable接口 包裝類(lèi) 創(chuàng)建一般的排序方法 JDK1.5 基本數(shù)據(jù)類(lèi)型與包裝類(lèi)之間自動(dòng)轉(zhuǎn)換,面向?qū)ο蠹夹g(shù),3,9.1 引言,抽象類(lèi)(abstract class)是指其表達(dá)的概念非常抽象, 以至于它沒(méi)有具體的實(shí)例. 從幾個(gè)類(lèi)中派生出一個(gè)子類(lèi)稱(chēng)為 “多重繼承”. Java的類(lèi)不支持多重繼承, 稱(chēng)為 “單繼承”. Java中可以使用接口(interface)得到
2、多重繼承的效果.,面向?qū)ο蠹夹g(shù),4,9.2 抽象類(lèi),抽象方法: 只有方法頭沒(méi)有方法體.用abstract修飾. 抽象類(lèi): 用abstract修飾的類(lèi), 不能用new創(chuàng)建對(duì)象.,public abstract class TheAbstarctClass public abstract void abstractMethod(); ,面向?qū)ο蠹夹g(shù),5,9.2 抽象類(lèi),什么時(shí)候需要設(shè)計(jì)并使用抽象類(lèi)?,以幾何對(duì)象為例. 許多幾何對(duì)象, 如圓、矩形和圓柱等, 有很多共同的屬性和行為, 如共同的屬性: 使用特定顏色繪制, 填充或不填充; 共同的方法: 計(jì)算面積和周長(zhǎng)等. 可以定義抽象類(lèi)Geometric
3、Object表示一般的幾何對(duì)象概念, 包含共同的屬性和方法. 其他具體的幾何對(duì)象可以作為該抽象類(lèi)的子類(lèi), 可以共享抽象父類(lèi)中的屬性和行為.,面向?qū)ο蠹夹g(shù),6,幾何對(duì)象問(wèn)題的UML類(lèi)圖,GeometricObject.java Circle.java Rectangle.java Cylinder.java,面向?qū)ο蠹夹g(shù),7,9.2 抽象類(lèi) - 注意問(wèn)題,非抽象類(lèi)不能包含抽象方法. 抽象類(lèi)不能用new運(yùn)算符實(shí)例化, 但可以有構(gòu)造方法. 包含抽象方法的類(lèi)必須是抽象的, 但也允許聲明沒(méi)有抽象方法的抽象類(lèi). 具體的父類(lèi)也可以派生抽象的子類(lèi). 子類(lèi)可以將父類(lèi)的具體方法覆蓋為抽象方法.(少用) 抽象類(lèi)不能
4、創(chuàng)建對(duì)象, 但可以聲明對(duì)象引用.GeometricObject geo = new GeometricObject10; 例: 使用GeometricObject類(lèi). TestGeometricObject.java,面向?qū)ο蠹夹g(shù),8,9.3 Calendar與GregorianCalendar,java.util.Date, 表示特定的瞬間, 精確到毫秒. java.util.Calendar, 抽象類(lèi), 為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日歷字段之間的轉(zhuǎn)換提供了一些方法, 并為操作日歷字段提供了一些方法. java.util.Gregori
5、anCalendar, 是 Calendar的一個(gè)具體子類(lèi),提供了世界上大多數(shù)國(guó)家/地區(qū)使用的標(biāo)準(zhǔn)日歷系統(tǒng)。,面向?qū)ο蠹夹g(shù),9,9.4 接口,接口(interface)是一種與類(lèi)相似的結(jié)構(gòu), 只包含常量和抽象方法. 接口聲明的語(yǔ)法修飾符 interface 接口名 /* 常量聲明 */ /* 抽象方法聲明 */ 每個(gè)接口在編譯時(shí)生成一個(gè).class, 接口不能用new創(chuàng)建對(duì)象實(shí)例.,面向?qū)ο蠹夹g(shù),10,9.4 接口,例: 設(shè)計(jì)一個(gè)比較兩個(gè)對(duì)象大小的一般方法.,/ interface for comparing objects, defined in java.lang package java
6、.lang; public interface Comparable public int compareTo(Object o); ,compareTo比較當(dāng)前對(duì)象與參數(shù)對(duì)象的大小, 返回值: 負(fù)整數(shù) 當(dāng)前對(duì)象小于參數(shù)對(duì)象 相等 正整數(shù) 當(dāng)前對(duì)象大于參數(shù)對(duì)象,面向?qū)ο蠹夹g(shù),11,9.4 接口,定義一個(gè)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類(lèi)庫(kù)中許多類(lèi)實(shí)現(xiàn)了Comparable接口, 定義了自然順序,因此可以使用max方法.,String s1 = “abcdef”, s2 = “abcdee”; String s3 = (String)Max.max(s1, s2);,例如:,面向?qū)ο蠹夹g(shù),12,9.4.1 實(shí)現(xiàn)接口,一個(gè)類(lèi)使用implements關(guān)鍵字實(shí)現(xiàn)一個(gè)或多個(gè)接口.,修飾符 class 類(lèi)名 implements 接口1, , 接口n /* 類(lèi)體 */ ,關(guān)鍵字implements表示類(lèi)繼承了后面列出的每個(gè)接口中的所有常量, 并實(shí)現(xiàn)接口的全部或部分方法. 所謂 “實(shí)現(xiàn)”是指在類(lèi)中覆蓋接口中聲明的抽象方法.,
8、面向?qū)ο蠹夹g(shù),13,9.4.1 實(shí)現(xiàn)接口,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; ,面向?qū)ο蠹夹g(shù),14,9.4.1 實(shí)現(xiàn)接口,UML圖形符號(hào),接口,實(shí)現(xiàn),ComparableRectangle r1 = new ComparableRectangle(4, 5); ComparableRectangle r1 = new ComparableRectangle(3, 6); Max.max(r1, r2);,面向?qū)ο蠹夹g(shù),15,9.4.2 接口與抽象類(lèi),接口的數(shù)據(jù)域必須是常量; 抽象類(lèi)有非常量. 接口的方法必須是抽象的; 抽象類(lèi)有具體方法.,接口與抽象類(lèi)的區(qū)別:,接口中常量的訪問(wèn):接口名.常量名 例如: T1.K,面向?qū)ο?/p>
10、技術(shù),16,9.4.2 接口與抽象類(lèi),一個(gè)類(lèi)可以extends一個(gè)父類(lèi), 同時(shí)implements多個(gè)接口.,public class 子類(lèi) extends 父類(lèi) implements 父接口1, , 父接口N ,一個(gè)接口可以extends多個(gè)父接口, 稱(chēng)為 “子接口”.,public class 子接口 extends 父接口1, , 父接口N ,面向?qū)ο蠹夹g(shù),17,9.4.2 接口與抽象類(lèi),interface CanFight void fight(); interface CanSwim void swim(); interface CanFly void fly(); interfac
11、e ActionList extends CanFight,CanSwim,CanFly,接口繼承的示例,問(wèn)題: 在接口ActionList中有幾個(gè)方法?,面向?qū)ο蠹夹g(shù),18,9.4.2 接口與抽象類(lèi),interface ActionList void fight(); void swim();abstract class Human implements ActionList public void swim() class Hero implements ActionList public void fight() public void swim() ,接口實(shí)現(xiàn)示例,問(wèn)題1: 為什么Hu
12、man是抽象類(lèi)而Hero是具體類(lèi)? 問(wèn)題2: 為什么Human和Hero中的方法都是public的?,面向?qū)ο蠹夹g(shù),19,9.4.2 接口與抽象類(lèi)接口類(lèi)型引用,1.可以使用接口類(lèi)型聲明的引用訪問(wèn)任何實(shí)現(xiàn)了該接口的具體類(lèi)的對(duì)象.,2.使用接口類(lèi)型的引用只能訪問(wèn)類(lèi)中實(shí)現(xiàn)的屬于該接口的方法.,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(); / 錯(cuò)誤! 不能訪問(wèn)!,面向?qū)ο蠹夹g(shù),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”; ,面向?qū)ο蠹夹g(shù),21,9.4.4 可克隆接口Cloneable,Cloneable接口的定義如下:,packag
15、e java.lang; public interface Cloneable ,主體為空的接口稱(chēng)為 “標(biāo)記接口”. 標(biāo)記接口用于說(shuō)明實(shí)現(xiàn)它的類(lèi)具有某種必備的特性. Cloneable接口說(shuō)明實(shí)現(xiàn)了它的類(lèi)是可復(fù)制的, 即該類(lèi)的對(duì)象可以使用clone()方法進(jìn)行復(fù)制. Java類(lèi)庫(kù)中許多類(lèi)均實(shí)現(xiàn)了Cloneable接口.,面向?qū)ο蠹夹g(shù),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);,輸出結(jié)果為: cal1 = cal2 是 false cal1.equals(cal2) 是 true,面向?qū)ο蠹夹g(shù),23,9.4.4 可克隆接口Cloneable,自定義實(shí)現(xiàn)復(fù)制的類(lèi), 必須滿足以下2點(diǎn): 1. 該類(lèi)必須實(shí)現(xiàn)java.lang.Cloneable接口. 2. 該類(lèi)必須覆蓋Object類(lèi)的clone方法.,Object類(lèi)中的clone方法的定義如下: protected native Object Cloneable() throws CloneNotSupportedException;,覆蓋該方法時(shí), 需要將protected改為public, 并在覆蓋方法中使用super.clone()調(diào)用父類(lèi)的復(fù)制方法.,講解例子: House.java,面向?qū)ο蠹夹g(shù),24,9.4.4 可克隆接口Cloneable,House.java中實(shí)現(xiàn)的是 “淺復(fù)制”, 而不是 “深復(fù)制”.,(1) House house1 =
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年內(nèi)蒙古農(nóng)業(yè)大學(xué)職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試備考試題帶答案解析
- 2026年中國(guó)物流集團(tuán)國(guó)際物流事業(yè)部區(qū)域市場(chǎng)拓展崗面試模擬題及解析
- 2026年少先隊(duì)大隊(duì)委員選拔考試核心內(nèi)容鞏固練習(xí)題及參考答案
- 2026年化工安全操作復(fù)習(xí)資料分類(lèi)題庫(kù)含答案
- 2026年衛(wèi)生院長(zhǎng)綜合履職能力全面測(cè)評(píng)練習(xí)題及答案
- 2026年成都水務(wù)考試水務(wù)工程檔案管理規(guī)范專(zhuān)項(xiàng)測(cè)評(píng)題及參考答案
- 2026年臺(tái)州科技職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試參考題庫(kù)有答案解析
- 2026年中國(guó)聯(lián)通成都秋招面試人工智能技術(shù)認(rèn)知練習(xí)題及參考答案
- 2026年衛(wèi)生技師考試題庫(kù)含答案
- 2026年南極旅游探險(xiǎn)隊(duì)員極地體檢與環(huán)保責(zé)任意識(shí)面試含答案
- 諾如病毒性胃腸炎的健康宣教
- 中建履帶吊安拆裝方案
- 入黨申請(qǐng)書(shū)專(zhuān)用紙-A4單面打印
- 高中化學(xué)基本概念大全
- 五級(jí)養(yǎng)老護(hù)理員職業(yè)鑒定理論考試題庫(kù)(核心400題)
- 湖北省荊州市五縣市區(qū)2025屆高三第二次調(diào)研物理試卷含解析
- 2025屆高考寫(xiě)作:思辨性作文寫(xiě)作指導(dǎo)
- 2024年安徽管子文化旅游集團(tuán)有限公司招聘筆試沖刺題(帶答案解析)
- 2024年江蘇省高中學(xué)業(yè)水平合格性考試數(shù)學(xué)試卷試題(答案詳解1)
- (小升初備考講義)專(zhuān)題四 植樹(shù)問(wèn)題(計(jì)算技巧篇)(講義)
- 示波器的使用示波器的使用
評(píng)論
0/150
提交評(píng)論