Java基礎:第三十八講 抽象類別與抽象方法

來源:互聯網
上載者:User

本講要說明的幾個問題:什麼是抽象類別,抽象類別的特點,抽象方法,抽象方法與抽象類別的關係。

1、什麼是抽象類別

抽象類別,實際上就是對類的進一步抽象。

從前面的介紹中,我們知道在物件導向的分析和設計中有很多次抽象,從現實世界中的對象抽象出軟體系統中的對象(保留主要屬性和行為,去掉次要屬性和行為),從軟體系統中的對象抽象出軟體系統中的類(去掉屬性值,把具體的對象變成了抽象的概念),現在我們要介紹的抽象類別是對多個類的抽象結果,抽象類別中描述了多個具體類的共同特徵和行為,與我們之前說的父類是類似,不同之處在於抽象類別不能有具體的對象,抽象類別可以有不用實現的方法。

典型的例子就是交通工具,我們知道飛機、輪船、汽車、火車都是交通工具,都可以把乘客從一個地方帶到另外一個地方,但是各種不同的交通工具的運行方式是不同的,汽車沿著公路走,火車沿著鐵路線走,飛機需要先起飛、飛行、然後降落,有一定的航線。正式因為有這些共同特徵,才抽象出交通工具這樣的類。

我們可以說具體的飛機、輪船、汽車和火車對象,但是沒有交通工具對象,這時候交通工具就是抽象的。

2、如何定義抽象類別

使用abstract關鍵字定義抽象類別,例如:

public abstract class A{

   ...

}

如果某個類是抽象類別,則這個類不能有具體的對象。

如果某個類沒有具體的對象,這個類還有什麼用呢?通過這個類可以派生出子類,子類可以是抽象類別也可以是非抽象類別。所以有抽象類別通常都是作為父類存在的。

3、抽象方法

在前面的介紹中,我們知道方法包括如下組成部分:方法的修飾符、方法的傳回值類型、方法的名字、方法的參數列表、方法體。例如:

    public int getParentA(){
     return super.a;
    }

如果一個方法只給出方法的定義部分,而沒有方法的具體實現,這個方法就是抽象方法。

例如:

    public int getParentA();

抽象方法的含義:某個對象具有這樣的方法,但是方法如何?不清楚。

例如上面的例子,各種交通工具都可以把乘客從一個地方帶到另外一個地方,所以交通工具應該具有一個方法——移動,但是具體如何移動,不清楚,所以如果要在交通工具這個類中定義這個方法,只能是抽象的。意味著,交通工具應該有一個方法(移動),但是具體如何?,需要看具體的子類。

另外一個典型的例子是幾何圖形,在軟體系統中需要畫各種圖形,每種圖形是具體的類,而圖形作為抽象類別。要在系統中顯示各種圖形,每種圖形類都應該有畫的方法,但是各種圖形的畫法不同,例如三角形需要給出3個點,而圓需要給出圓心和半徑,直線需要給出兩個點。所以在圖形抽象類別中中只能聲明這個一個畫的方法,具體實現留給子類。

4、如何定義抽象方法

抽象方法使用關鍵字abstract定義,例如畫圖的方法可以定義為:

    public abstract void print();

在類中,如果一個方法只給出聲明,沒有具體實現,應該使用abstract定義為抽象方法。

5、抽象方法與抽象類別

如果一個類中出現了抽象方法,則這個類必須定義為抽象類別。例如上面的圖形類:

public abstract class Graphics{

    ...

    public abstract void print();

}

子類可以去實現具體的畫法,例如三角形:

public class Triangle extends Graphics{

   private Point[] p; // 描述三角形的三個點

   public abstract void print(){

      ... // 根據3個點畫圖

   }

}

請記住:有抽象方法的類一定是抽象類別。

抽象類別一定要有抽象方法嗎?不一定,抽象類別可以沒有抽象方法。

抽象類別一定不能有執行個體,下面的代碼是錯誤的:

Graphics g = new Graphics();

6、抽象類別的作用

抽象類別用於派生新的子類,子類在繼承抽象類別的時候,必須實現所有抽象方法,除非子類還是抽象類別。

抽象類別的子類允許是抽象類別。

下次介紹物件導向的一大特性——多態性。

上一次: 第三十七講 成員方法的繼承與覆蓋

下一次:第三十九講 多態

李緒成 CSDN Blog:http://blog.csdn.net/javaeeteacher邀請您為好友:http://student.csdn.net/invite.php?u=124362&c=7be8ba2b6f3b6cc5

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.