java學習總結 抽象類

2021-09-05 11:51:43 字數 2277 閱讀 1832

什麼是抽象類

定義抽象類是子類的超集,抽象類僅是在普通類的基礎上增加了一些抽象方法,且被abstratc修飾的類。

什麼是抽象方法呢?

定義沒有方法體只有方法宣告且被abstract修飾的方法

如:

abstract

void

fun(

);

注:這裡的一些可以是0,即乙個抽象類中可以不含任何抽象方法。因此含有抽象方法的類一定是抽象類,但不含抽象方法的類不一定不是抽象類。普通類是不能含有抽象方法的。為什麼要有抽象類?

這是因為在乙個類中,某個方法的具體實現方式不確定或者完全沒有必要實現!就比如乙個動物類,談起動物在腦海中肯定對應不起乙個具體的動物,它是抽象的,因此動物類不能例項化乙個動物物件,動物類下面有貓和狗兩個子類,就飲食這個方法而言,貓和狗的方法各有不同,而且在父類------動物類中也沒有辦法具體實現這個方法,因為每一種動物都對應一種獨特的飲食方法。因此將這個飲食方法設定為抽象方法,父類只管宣告一下,具體的實現,延遲到子類,每個子類都有不同的具體的實現方式,這也恰恰體現了物件導向的多型性,第二是因為某個介面下面可能有多個實現類,而這些實現類呢,有一些公共的方法或者屬性,如果每個類都來實現的話,**比較冗餘,因此將這些**抽出來,放在乙個抽象類中,然後下面的類繼承這個抽象類就好了,在jdk中有大量類似的結構。

抽象類如何使用?

abstract

class

animal

public

abstract

void

eat();

//抽象方法

}

可以看出抽象類和普通類沒有多大區別,僅僅多了一些抽象方法,且被abstract修飾。雖然沒有多大區別,我們也很有必要分析一下抽象類和普通類的具體區別

1.抽象類的定義必須使用abstract關鍵字。

2.抽象類不能直接new物件,但可以有抽象類型別的的變數。

原因:抽象類中含有抽象方法,建立物件則要呼叫其中的方法,而抽象方法又沒有任何意義,因此抽象類不能直接建立物件。可以通過子類向上轉型例項化。

abstract

class

animal

public

abstract

void

eat();

//抽象方法

}class

catextends

animal

public

void

eat()}

lic class

test

}

3.抽象類被普通類繼承時,抽象類要求子類覆寫抽象類的所有抽象方法。注:private與abstract不能同時使用 (private型別的方法不能被覆寫)

abstract與final不能同時使用(final修飾的類不能被繼承)。

abstract與static不能同時使用(static修飾的方法不能被覆寫)

抽象類的子類

a.普通類繼承抽象類 - ---------強制要求覆寫抽象類中的所有抽象方法

b.抽象類繼承抽象類 -----------沒有強制要求覆寫抽象類中的抽象方法

注:抽象類本質還是乙個類因此只能單繼承。

普通類的子類也可以是抽象類

內部抽象類

abstract

classa}

class

cextends

aclass

dextendsb}

}public

class

test

輸出結果:

抽象類與其子類的結構類似,都含有內部類。但當普通類只繼承外部抽象類時可以不覆寫內部抽象類的抽象方法,同理只繼承內部抽象類時也可以不覆寫外部類的抽象方法。

Java學習總結 抽象類

今天看了很多關於抽象類的資料,腦子裡很亂,現在來總結一下 1 abstract 抽象 可以修飾類和方法。如果將乙個類宣告為abstract,那這個類不能生成物件,只能被繼承。抽象類的設計是將子類的共性最大限度地抽出來,以提高程式的統一性。2 乙個類中包含有抽象方法,則此類一定要宣告為抽象類。如果乙個...

Java學習 抽象類

當多個類中出現相同功能,但是功能主體不同 這是可以進行向上抽取,這時,只抽取功能定義,而不抽取功能主體 抽象 看不懂 抽象類的特點 1 抽象方法一定在抽象類中。2 抽象方法和抽象類都必須被abstract關鍵字修飾。3 抽象類不可以用new建立物件。以為呼叫抽象方法沒意義。4 抽象類中的方法要被使用...

Java學習 抽象類

二 抽象方法 含義 使用abstract修飾的類。適用場景 父類只知道有該方法,但不知子類如何執行時。語法 public abstract class 類名 專案含義 含義使用abstract修飾的類。類作用作為子類的通用模板 成員同普通類,只是可以加入抽象方法。特點不能被例項化,但可使用多型方式。...