Java 教程(抽象方法和類)

2021-09-12 21:48:05 字數 3114 閱讀 4245

抽象類是乙個宣告為abstract的類 — 它可能包括也可能不包括抽象方法,抽象類無法例項化,但可以進行子類化。

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

abstract void moveto(double deltax, double deltay);
如果乙個類包含抽象方法,那麼該類本身必須被宣告為abstract,如:

public abstract class graphicobject
當抽象類被子類化時,子類通常為其父類中的所有抽象方法提供實現,但是,如果沒有,那麼子類也必須宣告為abstract

注意:未宣告為defaultstatic的介面(參見

介面部分)中的方法是隱式抽象的,因此abstract修飾符不用於介面方法(可以使用,但不需要)。

抽象類與介面類似,你不能例項化它們,它們可能包含有或沒有實現宣告的方法的組合,但是,使用抽象類,你可以宣告非靜態和final的字段,並定義publicprotectedprivate的具體方法。使用介面,所有欄位都自動為publicstaticfinal,並且你宣告或定義的所有方法(作為預設方法)都是public,此外,你只能擴充套件乙個類,無論它是否是抽象的,而你可以實現任意數量的介面。

你應該使用哪個,抽象類或介面?

如果任何這些語句適用於你的情況,請考慮使用介面:

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 

abstract void draw();

abstract void resize();

}

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

class circle extends graphicobject 

void resize()

}class rectangle extends graphicobject

void resize()

}

在介面一節中,注意到實現介面的類必須實現所有介面的方法,但是,可以定義乙個不實現所有介面方法的類,前提是該類被宣告為abstract,例如:

abstract class x implements y 

class xx extends x

在這種情況下,類x必須是abstract,因為它沒有完全實現y,但實際上,類xx實現了y

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

java抽象類和抽象方法

抽象類就是不能使用new方法進行例項化的類,即沒有具體例項物件的類。抽象類有點類似 模板 的作用,目的是根據其格式來建立和修改新的類。物件不能由抽象類直接建立,只可以通過抽象類派生出新的子類,再由其子類來建立物件。當乙個類被宣告為抽象類時,要在這個類前面加上修飾符abstract。在抽象類中的成員方...

java抽象類和抽象方法

抽象類就是不能使用 new方法進行例項化的類,即沒有具體例項物件的類。抽象類有點類似 模板 的作用,目的是根據其格式來建立和修改新的類。物件不能由抽象類直接建立,只可以通過抽象類派生出新的子類,再由其子類來建立物件。當乙個類被宣告為抽象類時,要在這個類前面加上修飾符 abstract 在抽象類中的成...

java抽象類和抽象方法

一.抽象方法定義 使用abstract修飾且沒有方法體的方法,稱為抽象方法.特點 1.使用抽象abstract修飾,方法沒有方法體,留給子類去實現 覆蓋.2.抽象方法修飾符不能是private,final,static修飾,因為抽象方法要留給子類去實現 3.抽象方法必須定義在抽象類或者介面中.二.抽...