java 抽象方法和類(翻譯自Java Tutorials)

來源:互聯網
上載者:User

原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/12/05/2802733.html

英文出自 http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

抽象類別是聲明為abstract的類——它可以或不用包含抽象方法。抽象類別不能被執行個體化,但他們可以被繼承。

抽象類別是一個聲明但沒有實現的方法(沒有大括弧,尾隨分號),例如:

abstract void moveTo(double deltaX, double deltaY);

如果一個類包含抽象方法,這個類必須聲明為abstract,如下:

public abstract class GraphicObject {   // declare fields   // declare non-abstract methods   abstract void draw();}

當抽象類別被繼承,子類通常要為父類的所有抽象方法提供實現。但是,如果沒有全部實現,子類也要聲明為abstract

注意:介面的所有方法隱式是abstract,所以abstract修飾符不用使用於介面方法(可以使用,非必須)。

  抽象類別和介面

不同於介面,抽象類別可以包含不是static和final的欄位,而且他們可以包含被實現的方法。這種抽象類別類似介面,不同之處在於它們提供了部分實現,把它留給子類來完成其他實現。如果一個抽象類別僅包含抽象方法的聲明,它應該被聲明為介面。

類層次中,類可以實現多個介面,無論兩兩之間是否有聯絡。例如考慮下Comparable和Cloneable。

通過比較,共用實現,最經常用的就是繼承抽象類別。一個抽象類別,是被一個和它有很多相似的(抽象類別的部分實現),但是有些不同(抽象方法)的子類繼承。

 

抽象類別例子

物件導向的繪圖應用程式中,可以畫圓形,矩形,線條,Bezier曲線,和其他很多繪圖物件。這些對象公用上都包含一定的狀態(例如:位置,方向,線條顏色,填充顏色)和行為(例如:移動,旋轉,縮放,畫)。所有繪圖物件一些狀態和行為都是相同的,例如:位置,填充顏色,和移動。其他需要不同的實現,例如,縮放或繪製。所有繪圖物件必須知道如何繪製或縮放自己,他們是不同的,他們是如何做到這一點。這是一個完美的抽象父類。您可以利用相似性,聲明的所有繪圖物件繼承自同一個抽象的父物件,例如,GraphicObject,如所示。

 

類矩形, 線條,貝茲路徑, 和圓形繼承GraphicObject

首先,你聲明抽象類別GraphicObject提供成員變數和方法,這完全由所有子類共用,這像當前位置,移動方法。GraphicObject也要聲明抽象方法,如繪製或縮放,這需要給子類實現,但使用不同的方式實現。GraphicObject類看起來想這樣:

abstract class GraphicObject {    int x, y;    ...    void moveTo(int newX, int newY) {        ...    }    abstract void draw();    abstract void resize();}

每個GraphicObject的非抽象子類,如Circle和Rectangle,必須提供draw和resize方法的實現:

class Circle extends GraphicObject {    void draw() {        ...    }    void resize() {        ...    }}class Rectangle extends GraphicObject {    void draw() {        ...    }    void resize() {        ...    }}

 

當抽象類別實現介面

在介面的章節中,說過類實現介面時必須實現介面的全部方法。儘管如此,類如果聲明為abstract,它不需要實現介面全部的方法。例如

abstract class X implements Y {  // implements all but one method of Y}class XX extends X {  // implements the remaining method in Y}

這種情況下,X類必須為abstract,因為它沒有完全實現Y,而類XX則做到了全部實現Y。

  類成員

抽象類別可以有static欄位和static方法。可以通過類引用訪問static成員——例如,AbstractClass.staticMethod()——就像用其他類一樣。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.