《抽象類和接口》演示PPT_第1頁(yè)
《抽象類和接口》演示PPT_第2頁(yè)
《抽象類和接口》演示PPT_第3頁(yè)
《抽象類和接口》演示PPT_第4頁(yè)
《抽象類和接口》演示PPT_第5頁(yè)
已閱讀5頁(yè),還剩35頁(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)介

1、1 第第10章章 抽象類和接口抽象類和接口 10.1 引言 10.2 抽象類 10.3 日歷類Calendar和公歷類GregorianCanlendar 10.4 接口 10.5 將基本數(shù)據(jù)類型值處理為對(duì)象 10.6 基本類型和包裝類之間的自動(dòng)轉(zhuǎn)換 2 10.1 引言引言 抽象類:將父類設(shè)計(jì)得非常抽象,讓它包含所有子類的共同 屬性、方法,以至于它沒(méi)有具體的實(shí)例。 接口:實(shí)現(xiàn)多重繼承 3 10.2 抽象類抽象類 l存在意義存在意義 抽象類是類層次中較高層次的概括,抽象類的作用是讓其 他類來(lái)繼承它的抽象化的特征 抽象類中可以包括被它的所有子類共享的公共行為 抽象類中可以包括被它的所有子類共享的公

2、共屬性 在程序中不能用抽象類作為模板來(lái)創(chuàng)建對(duì)象; 在用戶生成實(shí)例時(shí)強(qiáng)迫用戶生成更具體的實(shí)例,保證代碼 的安全性 l抽象類的格式抽象類的格式abstract class 類名類名 l抽象方法的語(yǔ)法形式為抽象方法的語(yǔ)法形式為 abstract (.); l抽象方法的優(yōu)點(diǎn)抽象方法的優(yōu)點(diǎn) 隱藏具體的細(xì)節(jié)信息,所有的子類使用的都是相同的方法 頭,其中包含了調(diào)用該方法時(shí)需要了解的全部信息 強(qiáng)迫子類完成指定的行為,規(guī)定其子類需要用到的“標(biāo)準(zhǔn)” 行為 通用程序設(shè)計(jì)(一般程序設(shè)計(jì)) 例例1 6 問(wèn):抽象類問(wèn):抽象類GeometricObject中的中的 抽象方法可否刪除?抽象方法可否刪除? 7 l各種圖形都需要

3、實(shí)現(xiàn)繪圖方法各種圖形都需要實(shí)現(xiàn)繪圖方法,可在抽象父類中聲明一個(gè)可在抽象父類中聲明一個(gè)draw抽象方法抽象方法 abstract class GraphicObject int x, y; void moveTo(int X, int Y) . . . abstract void draw(); l然后在每一個(gè)子類中重寫然后在每一個(gè)子類中重寫draw方法,例如:方法,例如: class Circle extends GraphicObject void draw() . . . class Rectangle extends GraphicObject void draw() . . . pub

4、lic class Test public static void main() GraphicObject ob1=Cirlce(); GraphicObject ob2=Cirlce(); ob1.draw(); ob2.draw(); 例例2 l將所有圖形的公共屬性及方法抽象到抽象類將所有圖形的公共屬性及方法抽象到抽象類Shape。再將。再將2D 及及3D對(duì)象的特性分別抽取出來(lái),形成兩個(gè)抽象類對(duì)象的特性分別抽取出來(lái),形成兩個(gè)抽象類 TwoDimensionalShape及及ThreeDimensionalShape 2D圖形包括Circles、Triangles、Rectangles和S

5、quares 3D圖形包括Cube、Sphere、或Tetrahedron 在UML中,抽象類的類名為斜體斜體,以與具體類相區(qū)別 Shape CircleTriangle Rectangle Square TwoDimensionalShapeThreeDimensionalShape CubeSphere Tetrahedron 例例3 Loan LeaseMortgage HouseLoanCarLoan l貸款貸款(Loan)分為許多種類,如租借分為許多種類,如租借(Lease)、抵押抵押 (Mortgage)、房屋貸款房屋貸款(HouseLoan)、汽車貸款汽車貸款(CarLoan)

6、等等 l將將Loan聲明為抽象類,并指定所有的子類對(duì)象都應(yīng)具有的行聲明為抽象類,并指定所有的子類對(duì)象都應(yīng)具有的行 為,如計(jì)算月還款值為,如計(jì)算月還款值(calculateMonthlyPayment),還款還款 (makePayment),取得客戶信息取得客戶信息(getClientInfo),其中前兩其中前兩 個(gè)因貸款種類不同計(jì)算方法也不同,可聲明為抽象方法,個(gè)因貸款種類不同計(jì)算方法也不同,可聲明為抽象方法, Loan的所有子類都必須對(duì)這兩個(gè)抽象方法進(jìn)行重寫的所有子類都必須對(duì)這兩個(gè)抽象方法進(jìn)行重寫 public abstract class Loan public abstract floa

7、t calculateMonthlyPayment(); public abstract void makePayment(float amount); public Client getClientInfo() 例例4 l注意注意: 1 抽象類前需加修飾符abstract 2 不能使用new方法進(jìn)行實(shí)例化,故,抽象類必須被繼承 3 抽象類可包含常規(guī)類能夠包含的任何東西,例如構(gòu)造方 法等非抽象方法,其構(gòu)造方法在子類的構(gòu)造方法中調(diào)用 4 沒(méi)有抽象方法的類也可被聲明為抽象類 5 包含抽象方法的類必須聲明為抽象類 6 若子類沒(méi)有實(shí)現(xiàn)父類的全部抽象方法,它也必須聲明為 抽象類 7 抽象方法必須是非靜態(tài)

8、的,子類中的實(shí)現(xiàn)也必須是非靜 態(tài)的,否則無(wú)法覆蓋 8 即便父類是具體類,子類也可能是抽象類 9 抽象類雖然無(wú)法用new實(shí)例化,但可以用作數(shù)據(jù)類型 例:抽象類 x; 抽象類 a5=new 抽象類5; x=new 子類();ai=new 子類(); 11 10.3 日歷類日歷類Calendar和公歷和公歷 類類GregorianCanlendar 12 10.4 接口接口 Java不支持多重繼承,是為了使語(yǔ)言本身結(jié)構(gòu)簡(jiǎn)單,層次清不支持多重繼承,是為了使語(yǔ)言本身結(jié)構(gòu)簡(jiǎn)單,層次清 楚,易于管理,更安全可靠,避免沖突。但同時(shí)也就限制了楚,易于管理,更安全可靠,避免沖突。但同時(shí)也就限制了 語(yǔ)言的功能。語(yǔ)言

9、的功能。 為了在實(shí)際應(yīng)用中借助多重繼承的功能,共享一些公用的常為了在實(shí)際應(yīng)用中借助多重繼承的功能,共享一些公用的常 量和一些常用的方法,量和一些常用的方法,Java使用接口來(lái)彌補(bǔ)。使用接口來(lái)彌補(bǔ)。一個(gè)類可以實(shí)一個(gè)類可以實(shí) 現(xiàn)多個(gè)接口,達(dá)到多重繼承的效果現(xiàn)多個(gè)接口,達(dá)到多重繼承的效果。 接口可以看作是接口可以看作是常量常量和和沒(méi)有實(shí)現(xiàn)的方法沒(méi)有實(shí)現(xiàn)的方法的集合。的集合。 接口與抽象類相似,接口中的方法只是做了聲明,而沒(méi)有定接口與抽象類相似,接口中的方法只是做了聲明,而沒(méi)有定 義任何具體的操作方法。義任何具體的操作方法。 13 聲明接口的格式 修飾符 interface 接口名 /*常量*/ /*

10、抽象方法*/ 方法自動(dòng)為方法自動(dòng)為public abstract 變量自動(dòng)為變量自動(dòng)為public static final public interface Comparable public int compareTo(Object); 例如 package java.lang 14 public final class String extends Object implements Serializable, Comparable, CharSequence public int compareTo(String anotherString) public class Date ext

11、ends Object implements Serializable, Cloneable, Comparable public int compareTo(Date anotherDate) 類java.lang.String和Java.util.Date都實(shí)現(xiàn)了Comparable接口 右邊的表達(dá)式都成立 s instanceof String s instanceof Object s instanceof Comparable pareTo(“china”) 返回0 “china”.compareTo(s)返回0 “china”.compareTo(“japan”)返回-7 publ

12、ic class Max public static Comparable max(Comparable o1, Comparable o2) if(pareTo(o2)0) return o1; else return o2; 應(yīng)用:例如 String maxString=(String)Max.max(s,”japan”) 若String s=“china”;應(yīng)用例如 P277的圖a和圖b 問(wèn):為什么說(shuō)圖a更魯棒? 16 l接口接口 與抽象類一樣都是定義多個(gè)類的共同屬性 使抽象的概念更深入了一層,是一個(gè)“純”抽象類, 它只提供一種形式,并不提供實(shí)現(xiàn) 允許創(chuàng)建者規(guī)定方法的基本形式:方法名、參

13、數(shù)列 表以及返回類型,但不規(guī)定方法主體。方法自動(dòng)為 public abstract 也可以包含基本數(shù)據(jù)類型的數(shù)據(jù)成員,但它們都自 動(dòng)為public static final 17 l接口允許我們?cè)诳雌饋?lái)不相干的對(duì)象之間接口允許我們?cè)诳雌饋?lái)不相干的對(duì)象之間 定義共同行為定義共同行為 18 l接口的作用接口的作用 是面向?qū)ο蟮囊粋€(gè)重要機(jī)制 實(shí)現(xiàn)多繼承,同時(shí)免除C+中的多繼承 那樣的復(fù)雜性 建立類和類之間的“協(xié)議” l把類根據(jù)其實(shí)現(xiàn)的功能來(lái)分別代表,而不必 顧慮它所在的類繼承層次;這樣可以最大限 度地利用動(dòng)態(tài)綁定,隱藏實(shí)現(xiàn)細(xì)節(jié) l實(shí)現(xiàn)不同類之間的常量共享 19 l接口的語(yǔ)法接口的語(yǔ)法 聲明格式為 p

14、ublic interface 接口名稱 extends 父接口名 /方法的原型聲明或靜態(tài)常量 接口的數(shù)據(jù)成員一定要賦初值,且此值將不能 再更改,允許省略public static final關(guān)鍵字 接口中的方法必須是“抽象方法”,不能有方 法體,允許省略public abstract關(guān)鍵字 接口也可以繼承 20 接口的實(shí)現(xiàn) l接口的實(shí)現(xiàn)接口的實(shí)現(xiàn) 接口不能用new運(yùn)算符直接產(chǎn)生對(duì)象,必須利 用其特性設(shè)計(jì)新的類,再用新類來(lái)創(chuàng)建對(duì)象 利用接口設(shè)計(jì)類的過(guò)程,稱為接口的實(shí)現(xiàn),使 用implements關(guān)鍵字 語(yǔ)法如下 public class 類名稱 implements 接口名稱 /* Bodie

15、s for the interface methods */ /* Own data and methods. */ l必須實(shí)現(xiàn)接口中的所有方法 l實(shí)現(xiàn)接口的方法必須聲明成public 21 例例1 l聲明一個(gè)接口聲明一個(gè)接口Shape2D,可利用它來(lái)實(shí)現(xiàn)二維的幾可利用它來(lái)實(shí)現(xiàn)二維的幾 何形狀類何形狀類Circle和和Rectangle 把計(jì)算面積的方法聲明在接口里 pi值是常量,把它聲明在接口的數(shù)據(jù)成員里 interface Shape2D /聲明Shape2D接口 final double pi=3.14; /數(shù)據(jù)成員一定要初始化 public abstract double area()

16、;/抽象方法 在接口的聲明中,允許省略一些關(guān)鍵字,也可聲明 如下 interface Shape2D double pi=3.14; double area(); 例例2 23 class Circle implements Shape2D double radius; public Circle(double r) radius=r; public double area() return (pi * radius * radius); class Rectangle implements Shape2D int width,height; public Rectangle(int w,in

17、t h) width=w; height=h; public double area() return (width * height); l聲明聲明Circle與與Rectangle兩個(gè)類實(shí)現(xiàn)兩個(gè)類實(shí)現(xiàn)Shape2D接口接口 l測(cè)試類測(cè)試類 public class InterfaceTester public static void main(String args) Rectangle rect=new Rectangle(5,6); System.out.println(Area of rect = + rect.area(); Circle cir=new Circle(2.0);

18、System.out.println(Area of cir = + cir.area(); l運(yùn)行結(jié)果運(yùn)行結(jié)果 Area of rect = 30.0 Area of cir = 12.56 l聲明接口類型的變量,并用它來(lái)訪問(wèn)對(duì)象聲明接口類型的變量,并用它來(lái)訪問(wèn)對(duì)象 public class VariableTester public static void main(String args) Shape2D var1,var2; var1=new Rectangle(5,6); System.out.println(Area of var1 = + var1.area(); var2=ne

19、w Circle(2.0); System.out.println(Area of var2 = + var2.area(); l輸出結(jié)果輸出結(jié)果 Area of var1 = 30.0 Area of var2 = 12.56 26 l多重繼承多重繼承 Java的設(shè)計(jì)以簡(jiǎn)單實(shí)用為導(dǎo)向,不允許一個(gè)類 有多個(gè)父類 但允許一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,通過(guò)這種機(jī)制 可實(shí)現(xiàn)多重繼承 一個(gè)類實(shí)現(xiàn)多個(gè)接口的語(yǔ)法如下 類修飾符 class 類名稱 implements 接口1,接口2, 27 lCar類可以實(shí)現(xiàn)接口類可以實(shí)現(xiàn)接口Insurable,Drivable,Sellable public class C

20、ar implements Insurable, Drivable, Sellable . 例例3 28 l聲明聲明Circle類實(shí)現(xiàn)接口類實(shí)現(xiàn)接口Shape2D和和Color Shape2D具有pi與area()方法,用來(lái)計(jì)算面積 Color則具有setColor方法,可用來(lái)賦值顏色 通過(guò)實(shí)現(xiàn)這兩個(gè)接口,Circle類得以同時(shí)擁有這 兩個(gè)接口的成員,達(dá)到了多重繼承的目的 interface Shape2D /聲明Shape2D接口 final double pi=3.14; /數(shù)據(jù)成員一定要初始化 public abstract double area(); /抽象方法 interface

21、Color void setColor(String str); /抽象方法 例例4 class Circle implements Shape2D, Color / 實(shí)現(xiàn)Circle類 double radius; String color; public Circle(double r) /構(gòu)造方法 radius=r; public double area() /定義area()的處理方式 return (pi*radius*radius); public void setColor(String str) /定義setColor()的處理方式 color=str; System.out.

22、println(color=+color); l測(cè)試類測(cè)試類 public class MultiInterfaceTester public static void main(String args) Circle cir; cir=new Circle(2.0); cir.setColor(blue); System.out.println(Area = + cir.area(); l輸出結(jié)果輸出結(jié)果 color=blue Area = 12.56 l接口的多重?cái)U(kuò)展接口的多重?cái)U(kuò)展 接口可通過(guò)擴(kuò)展的技術(shù)派生出新的接口 l原來(lái)的接口稱為基本接口(base interface)或父接口 (sup

23、er interface) l派生出的接口稱為派生接口(derived interface)或子接 口(sub interface) 派生接口不僅可以保有父接口的成員,同時(shí)也可加入新 成員以滿足實(shí)際問(wèn)題的需要 實(shí)現(xiàn)接口的類也必須實(shí)現(xiàn)此接口的父接口 接口擴(kuò)展的語(yǔ)法 interface 子接口的名稱 extends 父接口1,父接口2, 32 接口的擴(kuò)展接口的擴(kuò)展 public interface I1 public void m1(); public interface I2 extends I1 public void m2(); public interface I3 public void

24、 m3(); public class A implements I2, I3 public void m1() / implements public void m2() / implements public void m3() / implements I1.java I2.java I3.java A.java 當(dāng)一個(gè)類實(shí)現(xiàn)多個(gè)接口時(shí), 這個(gè)類可以是多種類型的實(shí)例。 如下列表達(dá)式都返回true A a = new A(); a instanceof I1 a instanceof I2 a instanceof I3 a instanceof Object I1 i1 = new A(

25、); I2 i2 = new A(); I3 i3 = new A(); 33 Cloneable接口接口 lJava定義了定義了Cloneable接口,任何想實(shí)現(xiàn)克隆功能的類必須接口,任何想實(shí)現(xiàn)克隆功能的類必須 實(shí)現(xiàn)該接口,同時(shí)改寫從實(shí)現(xiàn)該接口,同時(shí)改寫從Object類繼承的類繼承的clone方法,并將訪方法,并將訪 問(wèn)屬性改為問(wèn)屬性改為public l但但Cloneable接口為空接口,其定義為接口為空接口,其定義為 package java.lang; public interface Cloneable l空接口稱為標(biāo)記接口空接口稱為標(biāo)記接口(markup interface) l空接

26、口唯一作用:允許用空接口唯一作用:允許用instanceof檢查對(duì)象的類型:檢查對(duì)象的類型: if(obj instanceof Cloneable) protected native Object clone() throws CloneNotSupportedException; Java.lang.Object類中有類中有 class A implements Cloneable protected A clone() try return (A)super.clone(); catch (CloneNotSupportedException ex) return null; publi

27、c class T public static void main(Strings) A a1=new A(); A a2=a1.clone(); 想用clone 類A需要: (1)實(shí)現(xiàn)Cloneable (2)覆蓋Object中的 clone()方法 至少是protected 返回的是A,是Object 的子類,也能覆蓋 class A implements Cloneable protected A clone() throws CloneNotSupportedException return (A)super.clone(); public class T public static

28、void main(Strings) throws CloneNotSupportedException A a1=new A(); A a2=a1.clone(); 36 class B class A extends B implements Cloneable protected A clone() throws CloneNotSupportedException return (A)super.clone(); public class T public static void main(Strings) throws CloneNotSupportedException B a1=new A(); A a2=a1.clone(); 編譯錯(cuò)。B類沒(méi)有實(shí)現(xiàn)Cloneable接口,沒(méi)有重寫clone()方法 37

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論