国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java? 教程(抽象方法和類)

Amio / 3106人閱讀

抽象方法和類

抽象類是一個聲明為abstract的類 — 它可能包括也可能不包括抽象方法,抽象類無法實例化,但可以進行子類化。

抽象方法是在沒有實現的情況下聲明的方法(沒有大括號,后跟分號),如下所示:

abstract void moveTo(double deltaX, double deltaY);

如果一個類包含抽象方法,那么該類本身必須被聲明為abstract,如:

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

當抽象類被子類化時,子類通常為其父類中的所有抽象方法提供實現,但是,如果沒有,那么子類也必須聲明為abstract

注意:未聲明為defaultstatic的接口(參見接口部分)中的方法是隱式抽象的,因此abstract修飾符不用于接口方法(可以使用,但不需要)。
抽象類與接口相比

抽象類與接口類似,你不能實例化它們,它們可能包含有或沒有實現聲明的方法的組合,但是,使用抽象類,你可以聲明非靜態和final的字段,并定義publicprotectedprivate的具體方法。使用接口,所有字段都自動為publicstaticfinal,并且你聲明或定義的所有方法(作為默認方法)都是public,此外,你只能擴展一個類,無論它是否是抽象的,而你可以實現任意數量的接口。

你應該使用哪個,抽象類或接口?

如果任何這些語句適用于你的情況,請考慮使用抽象類:

你希望在幾個密切相關的類之間共享代碼。

你希望擴展抽象類的類具有許多公共方法或字段,或者需要非公共的訪問修飾符(如protectedprivate)。

你想聲明非靜態或非最終字段,這使你能夠定義能夠訪問和修改它們所屬的對象的狀態的方法。

如果任何這些語句適用于你的情況,請考慮使用接口:

你希望不相關的類將實現你的接口,例如,Comparable和Cloneable接口由許多不相關的類實現。

你希望指定特定數據類型的行為,但不關心誰實現其行為。

你希望利用類型的多重繼承。

JDK中的抽象類的一個示例是AbstractMap,它是集合框架的一部分,它的子類(包括HashMapTreeMapConcurrentHashMap)共享AbstractMap定義的許多方法(包括getputisEmptycontainsKeycontainsValue)。

JDK中實現多個接口的類的一個示例是HashMap,它實現了SerializableCloneableMap接口。通過閱讀這個接口列表,你可以推斷出HashMap的實例(無論是實現該類的開發人員或公司)可以克隆,可序列化(這意味著它可以轉換為字節流)。請參閱Serializable Objects部分,并具有map的功能,此外,Map接口已經增強了許多默認方法,例如mergeforEach,實現此接口的舊類不必定義。

請注意,許多軟件庫都使用抽象類和接口,HashMap類實現了幾個接口,并且還擴展了抽象類AbstractMap

抽象類示例

在面向對象的繪圖應用程序中,你可以繪制圓形、矩形、線條、貝塞爾曲線和許多其他圖形對象,這些對象都具有某些狀態(例如:位置、方向、線條顏色、填充顏色)和行為(例如:moveTorotateresizedraw)。所有圖形對象中的一些狀態和行為都是相同的(例如:位置、填充顏色和moveTo),其他需要不同的實現(例如,resizedraw)。所有GraphicObjects必須能夠自己繪制或調整大小,它們只是做的方式不同,這是抽象超類的完美情況。你可以利用相似性并聲明所有圖形對象從同一個抽象父對象(例如,GraphicObject)繼承,如下圖所示。

首先,聲明一個抽象類GraphicObject,以提供所有子類完全共享的成員變量和方法,例如當前位置和moveTo方法,GraphicObject還聲明了方法的抽象方法,例如drawresize,它們需要由所有子類實現,但必須以不同的方式實現,GraphicObject類看起來像這樣:

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

GraphicObject的每個非抽象子類(例如CircleRectangle)必須提供drawresize方法的實現:

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

類成員

抽象類可以具有靜態字段和靜態方法,你可以像使用任何其他類一樣使用帶有類引用的靜態成員(例如,AbstractClass.staticMethod())。

上一篇:Object作為超類 下一篇:數字

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72873.html

相關文章

  • Java? 教程(重寫和隱藏方法

    重寫和隱藏方法 實例方法 子類中的實例方法的簽名(名稱,加上其參數的數量和類型)和返回類型與超類中的實例方法相同,將覆蓋超類的方法。 子類覆蓋方法的能力允許類從行為足夠接近的超類繼承,然后根據需要修改行為,重寫方法與它重寫的方法具有相同的名稱、數量和參數類型,以及返回類型。重寫方法還可以返回由被重寫方法返回的類型的子類型,此子類型稱為協變返回類型。 覆蓋方法時,你可能希望使用@Override注解...

    fox_soyoung 評論0 收藏0
  • Java? 教程(目錄)

    Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實踐沒有利用在后續版本中引入的改進。 Java教程是希望使用Java編程語言創建應用程序的程序員的實用指南,其中包括數百個完整的工作示例和數十個課程,相關課程組被組織成教程。 覆蓋基礎知識的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術和安裝Java開發軟件并使用...

    lifesimple 評論0 收藏0
  • 樂字節Java編程語言發展、面向對象和類

    摘要:二面向對象概述面向過程的設計思想和面向對象的設計思想我要吃魚香肉絲蓋飯面向過程我買菜我洗菜我切菜我放水我點火我做飯我炒菜。。。。 大家好,上次我們講過了樂字節Java編程之方法、調用、重載、遞歸,接下來我們將會進入到Java封裝的內容。Java編程語言發展,面向對象和類。 一、編程語言的發展 機器語言——直接由計算機的指令組成,指令、數據、地址都以0和1組成:可以被計算機直接識別并執行...

    lufficc 評論0 收藏0
  • Java? 教程(數字)

    數字 本節首先討論java.lang包中的Number類,它的子類,以及使用這些類的實例化而不是原始數字類型的情況。 本節還介紹了PrintStream和DecimalFormat類,它們提供了編寫格式化數字輸出的方法。 最后,討論了java.lang中的Math類,它包含數學函數,以補充語言中內置的運算符,該類具有三角函數,指數函數等方法。 數字類 使用數字時,大多數時候在代碼中使用基元類型,例...

    Tonny 評論0 收藏0
  • Java? 教程(管理源文件和類文件)

    管理源文件和類文件 Java平臺的許多實現依賴于分層文件系統來管理源文件和類文件,盡管Java語言規范不要求這樣做,策略如下。 將類、接口、枚舉或注解類型的源代碼放在文本文件中,該文件的名稱是類型的簡單名稱,其擴展名為.java,例如: //in the Rectangle.java file package graphics; public class Rectangle { ... ...

    ghnor 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<