java面向對象編程_抽象類與接口_第1頁
java面向對象編程_抽象類與接口_第2頁
java面向對象編程_抽象類與接口_第3頁
java面向對象編程_抽象類與接口_第4頁
java面向對象編程_抽象類與接口_第5頁
已閱讀5頁,還剩20頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 抽象類 在面向對象的概念中,我們知道所有的對象都是通過類來描繪的,但是反過來卻不是這樣。并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。抽象類往往用來表征我們在對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。抽象類抽象類 抽象類:只能被繼承,不能實例化的類。抽象類:只能被繼承,不能實例化的類。 定義格式:定義格式: abstract class 類名類名 abstract 返回值類型返回值類型 方法名方法名(參數表參數表); 說明:說明:抽象類中可以包含抽象和非抽象方法,抽象類中可以包含

2、抽象和非抽象方法,也可以不包含抽象方法和非抽象方法。也可以不包含抽象方法和非抽象方法。只要有一個抽象方法,就是抽象類。只要有一個抽象方法,就是抽象類。改寫例子改寫例子abstract class Animal public abstract void eat();class Dog extends Animal public void eat()System.out.println(狗吃骨頭狗吃骨頭);class Cat extends Animal public void eat()System.out.println(貓吃老鼠貓吃老鼠);class Wolf extends Animal

3、public void eat()System.out.println(吃喜羊羊吃喜羊羊);說明說明 不能創建抽象類的對象不能創建抽象類的對象 (抽象類不能被實例抽象類不能被實例化化) 使用時使用時必須用其創建子類必須用其創建子類 子類可以定義自己的成員變量及方法,但子類可以定義自己的成員變量及方法,但必須將父類中所有抽象的方法代碼寫完必須將父類中所有抽象的方法代碼寫完 如果子類只是實現了部分抽象的方法,則如果子類只是實現了部分抽象的方法,則該類仍是抽象類該類仍是抽象類5.4 接口示例示例假設一組對象有相同的能力:它們都能飛。假設一組對象有相同的能力:它們都能飛。可以構造一個公有接口,稱為可以

4、構造一個公有接口,稱為Flyer,它支持三個操作:它支持三個操作:takeOff、land和和fly。接口接口 Flyer+takeOff()+land()+fly()+takeOff()+land()+fly()Airplane示例代碼示例代碼 public interface Flyer public void takeOff(); public void land(); public void fly(); public class Airplane implements Flyer public void takeOff(). public void land(). public vo

5、id fly(). 接口接口 接口使用接口使用interface關鍵字聲明關鍵字聲明 接口中只能包含:接口中只能包含:p抽象方法抽象方法p常量常量(默認為默認為public static final): 用得較少用得較少Flyer接口的多重實現接口的多重實現接口接口 Flyer+takeOff()+land()+fly()+takeOff()+land()+fly()Airplane+takeOff()+land()+fly()+buildNest()+layEggs()Bird+takeOff()+land()+fly()+leapBuilding()+stopBullet()Superma

6、n說明說明接口支持接口支持多重實現多重實現,一個子接口可以有多個父接口。,一個子接口可以有多個父接口。如:如: interface xx public void tt(); public void ss(); interface yy public void mm(); interface zz extends xx,yy 說明說明p接口本身只提供了定義,使用時要通過類接口本身只提供了定義,使用時要通過類實現接口實現接口(implements)。實現接口時必須。實現接口時必須將接口中的所有方法都加以實現。否則該將接口中的所有方法都加以實現。否則該類還是抽象類類還是抽象類(abstract cl

7、ass)p一個類可以實現多個接口一個類可以實現多個接口p擴展子句擴展子句(extends)必須在實現子句必須在實現子句(implements)前前示例示例 class aa implements xx,yy public void tt() public void ss() public void mm() 接口接口 Flyer+takeOff()+land()+fly()+takeOff()+land()+fly()Airplane+takeOff()+land()+fly()+buildNest()+layEggs()+eat()Bird+takeOff()+land()+fly()+le

8、apBuilding()+stopBullet()+eat()Superman+eat()AnimalVehicle繼承和實現的混合繼承和實現的混合Bird類類 public class Bird extends Animal implements Flyer public void takeOff() /*實現實現takeOff()方法方法*/ public void land() /*實現實現land()方法方法*/ public void fly() /*實現實現fly()方法方法*/ public void buildNest() /*行為行為*/ public void layEgg

9、s() /*行為行為*/ public void eat() /*覆蓋覆蓋eat()方法方法*/ 機場類機場類 class Airport void givePermissionToLand(Flyer f) f.land(); public static void main(String args) Flyer s1=new Airplane(); Flyer s2=new Superman(); Airport aa=new Airport(); aa.givePermissionToLand(s1); aa.givePermissionToLand(s2); 接口的使用接口的使用 接口可

10、以聲明方法,該方法將由一個或多接口可以聲明方法,該方法將由一個或多個類實現個類實現 接口可以捕獲無關聯類之間的相似性,而接口可以捕獲無關聯類之間的相似性,而無需強加類關系無需強加類關系 通過聲明一個實現若干接口的類來模擬多通過聲明一個實現若干接口的類來模擬多重繼承重繼承抽象類和接口的區別 抽象類表示該類中可能已經有一些方法的具體定抽象類表示該類中可能已經有一些方法的具體定義,但是接口就僅僅只能定義各個方法的界面義,但是接口就僅僅只能定義各個方法的界面(方法名,參數列表,返回類型),并不關心具(方法名,參數列表,返回類型),并不關心具體細節。體細節。 在在java中只能繼承一個類,但是能夠實現多

11、個接中只能繼承一個類,但是能夠實現多個接口!口! 抽象類在抽象類在Java語言中體現了一種繼承關系,要想語言中體現了一種繼承關系,要想使得繼承關系合理,父類和派生類之間必須存在使得繼承關系合理,父類和派生類之間必須存在is a關系,即父類和派生類在概念本質上應該關系,即父類和派生類在概念本質上應該是相同的。對于是相同的。對于interface 來說則不然,并不要求來說則不然,并不要求interface的實現者和的實現者和interface定義在概念本質上定義在概念本質上是一致的,僅僅是實現了是一致的,僅僅是實現了interface定義的功能而定義的功能而已。已。接口和抽象類的相似之處 接口和抽

12、象類的相似之處有三點: 不能實例化; 包含未實現的方法聲明; 派生類必須實現未實現的方法,抽象類是抽象方法,接口則是所有成員(不僅是方法包括其他成員)。例 定義一個Door的抽象概念,該Door具有執行兩個動作open和close,此時可以通過abstract class或者interface來定義一個表示該抽象概念的類型 abstract class Door abstract void open(); abstract void close(); interface Door void open(); void close(); 但如果要求Door還要具有報警的功能,就能得出差別。Alar

13、mDoor在概念本質上是Door,同時它有具有報警的功能。說明它又能夠完成報警概念中定義的行為,所以報警概念可以通過interface方式定義。 abstract class Door abstract void open(); abstract void close(); interface Alarm void alarm(); class AlarmDoor extends Door implements Alarm void open() void close() void alarm() +Rectangle(double,double)+getArea():doubleRectangle+Square(double)Square+Ellipse(double,double)+getArea():doubleEllipseShape+getArea():double作業作業橢圓面積計算方法S = *ab(ab分別為長半軸與短半軸)矩形正方形+Circle(double)Circle+Spider()+eat()Spider+Cat(name:String)+Cat()+getName

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論