如何精通抽象類和介面

2021-10-20 18:49:16 字數 2052 閱讀 5873

概念

抽象類必須使用abstract

class宣告

乙個抽象類中可以沒有抽象方法,抽象方法必須寫在抽象類或者介面中。

格式: abstract

class 類名

只宣告而未實現的方法為抽象方法(未實現指的是:沒有"{}"方法體),抽象方法必須使用abstract關鍵字宣告。

格式: abstact class 類名

在抽象類的使用中幾個原則:

抽象類本身是不能直接進行實列化操作的,即:不能直接使用關鍵字new完成。

乙個抽象類必須被子類所繼承,被繼承的子類(如果不是抽象類),則必須複寫(重寫)抽象類中的全部抽象方法。

1.   抽象類能否使用final宣告?

不能,因為final屬性的類式不能有子類的, 而抽象類必須有子類才有意義,所以不能。

2. 抽象類能否有構造方法?

能有構造方法,而且子類物件例項化的時候的流程與普通類的繼承式一樣的,都是要先呼叫父類中的構造方法(預設式無參的),之後再呼叫子類自己的構造方法。

1. 抽象類必須用public或protected修飾(如果為private修飾,那麼子類無法繼承,也就無法實現其抽象方法)

預設預設為 public

2. 抽象類不可以使用new關鍵字建立物件,但是在子類建立物件時,抽象父類也會被jvm例項化。

3. 如果乙個子類繼承抽象類,那麼必須實現其所有的抽象方法。如果有未實現的抽象方法,那麼子類也必須定義abstract類

如果乙個類中的全部方法都是抽象方法,全部屬性都是全域性常量,那麼此時就可以將這個類定義成乙個介面

inte***ce 介面名稱

這種思想是定義(規範,約束)與實現(名實分離的原則)的分離

優點:

1. 降低程式的耦合性;

2. 易於程式的擴充套件

3. 有利於程式的維護

因為介面本身都是由全域性常量和抽象方法組成,所以介面中的成員定義可以簡寫:

1. 全域性常量編寫時,可以省略public

static

final 關鍵字,例如:

public

static

final string info =

"內容"

; 簡寫後:

string info =

"內容"

;2. 抽象方法編寫時, 可以省略 public abstact 關鍵字 ,例如:

public

abstract

void

print()

; 簡寫後:

void

print()

;

介面的實現 implements

介面可以多實現:

格式:class 子類 implements 父介面1

,父介面2...

以上的**稱為介面的實現。那麼如果乙個類即要實現介面,又要繼承抽象類的話,則按照以下的格式編寫即可:

class 子類 extends 父類 implements 父類介面1

,父介面2...

.

介面因為都是抽象部分,不存在具體的實現,所以允許多繼承,例如:

inte***ce

cextends

a,b

如果乙個介面要想使用,必須依靠子類。子類(如果不是抽象類的話)
抽象類要被子類繼承,介面要被子類實現。

介面只能宣告抽象方法,抽象方法可以宣告抽象方法,也可以寫非抽象方法。

介面裡定義的變數只能是公共的靜態常量,抽象類中的變數是普通變數。

抽象類使用繼承類使用,無法多繼承。介面使用實現來使用,可以實現多繼承。

抽象類中可以包含static方法,但是介面中不用許(靜態方法不能被子類重寫,因此介面中不能宣告靜態方法)。

介面不能有構造方法,但是抽象類可以有。

介面和抽象類

介面和抽象類 今天自學了一下介面,從第一次接觸介面又進一步理解介面的原理。想到介面或許我們更多的是想到和類的對比,而類中抽象類和介面又更為相似。現在我講下我對介面和抽象類的理解。如果單從具體 來看,對這兩個概念很容易模糊,甚至覺得介面就是多餘的,因為單從具體功能來看,除多重繼承外 c 抽象類似乎完全...

抽象類和介面

抽象類 1.是一種特殊的類,除了不能被例項化外,具有類得其他特性.2.抽象類的方法可以不宣告為abstract,此時可以實現方法提 如果宣告為abstract,則不可以實現方法體,只能宣告,如 public abstract int remove int i,int j 此時類必須宣告為抽象 3.乙...

抽象類和介面

1.抽象類 含有abstract修飾符的類即為抽象類。可用於實現 重用。抽象類與普通類的唯一區別 不能建立例項物件 允許有抽象方法,但不必須是抽象的。抽象類中定義的抽象方法必須在具體子類中實現,所以不能有抽象構造方法或抽象靜態方法 如果沒有全部實現抽象父類的抽象方法,子類也要定義為抽象型別。2.介面...