抽象類與介面!

2021-08-28 11:27:54 字數 2559 閱讀 7085

一、抽象類      abstract

1、基本概念

在介紹抽象類之前,先介紹一下抽象方法。抽象方法是一種特殊的方法,它只有宣告,沒有具體的實現,宣告的格式如下:

abstract void fun();
抽象方法必須用關鍵字abstract來進行修飾。

如果乙個類中含有抽象方法,那它就是乙個抽象類,抽象類的類名之前也必須用關鍵字abstract進行修飾。**演示:

abstract class people
2、注意的地方

抽象類之中沒有具體實現的方法,所以不能用抽象類進行物件的建立。

抽象類中不一定非要包含抽象方法,只要有類名之前有abstract關鍵字進行修飾就一定是抽象類。

抽象類是為了繼承而存在的,如果定義了乙個抽象類,卻不去繼承它,那麼等於白白建立了這個抽象類。對於乙個父類,如果它的某個方法在父類中實現出來沒有任何意義,必須根據子類的實際需求來進行不同的實現,那麼就可以將這個方法宣告為abstract方法,此時這個類也就成為abstract類了。

3、抽象類和普通類之間的區別

1)抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),預設情況下預設為public。

2)抽象類不能用來建立物件。

3)如果乙個類繼承於乙個抽象類,則子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,則必須將子類也定義為abstract類。

**演示:

abstract  class people

abstract void fun();

}public class generic extends people

public void sum()

@override//子類重寫父類的抽象方法

void fun()

}

二、介面      inte***ce

介面的定義形式:

inte***ce inter
介面中可以定義變數和方法,但是,介面中的變數會被隱式地指定為public static final變數(並且只能是public static final變數);而方法會被隱式地指定為public abstract方法且只能是public abstract方法。介面中所有的方法不能有具體的實現,也就是說,介面中的方法必須都是抽象方法。介面是一種極度抽象的型別,它比抽象類更加「抽象」,並且一般情況下不在介面中定義變數。

要讓乙個類實現某個特定的介面,使用implements關鍵字,具體格式如下:

class people implements inter1,inter2...
允許乙個類遵循多個特定的介面。如果乙個非抽象類遵循了某個介面,就必須實現該介面中的所有方法。對於遵循某個介面的抽象類,可以不實現該介面中的抽象方法。

**演示:

inte***ce inter

public class generic implements inter

@override

public void sum()

}

三、抽象類與介面的區別

1)抽象類中的成員變數可以是各種型別的,而介面中的成員變數只能是public static final型別的;

2)介面中不能含有靜態**塊以及靜態方法,而抽象類可以有靜態**塊和靜態方法;

3)乙個類只能繼承乙個抽象類,而乙個類卻可以實現多個介面。

4)實現介面的一定要實現介面裡定義的所有方法,而實現抽象類可以有選擇地重寫需要用到的方法。

5)抽象類是對一種事物的抽象,即對類抽象,而介面是對行為的抽象。抽象類是對整個類整體進行抽象,包括屬性、行為,但是介面卻是對類區域性(行為)進行抽象。

6)對於抽象類,如果需要新增新的方法,可以直接在抽象類中新增具體的實現,子類可以不進行變更;而對於介面則不行,如果介面進行了變更,則所有實現這個介面的類都必須進行相應的改動。

**演示:門和警報的例子:門都有open( )和close( )兩個動作

abstract class door 

或者inte***ce door

現在如果我們需要門具有報警alarm( )的功能:

1)將這三個功能都放在抽象類裡面,但是這樣一來所有繼承於這個抽象類的子類都具備了報警功能,但是有的門並不一定具備報警功能;

2)將這三個功能都放在介面裡面,需要用到報警功能的類就需要實現這個介面中的open( )和close( ),也許這個類根本就不具備open( )和close( )這兩個功能,比如火災報警器。

所以,將報警這個功能單獨設計成乙個介面,門設定成乙個抽象類,再設計乙個報警門繼承door類和實現alarm介面。

inte***ce alram 

abstract class door

class alarmdoor extends door implements alarm

void close()

void alarm()

}

介面與抽象類

介面與抽象類區別 個人總結 語法結構 1 型別可以繼承多個介面,但是只能繼承乙個抽象類,即不支援多重繼承。2 介面可以用於值型別和引用型別,例如struct和class,而抽象類不能用於值型別,只能用於引用型別。3 抽象類定義可以包括建構函式,字段資料,非抽象成員 具體實現 等,而介面只能包括抽象成...

介面與抽象類

抽象類 當抽象類作為父類時,他的子類對其中的抽象類方法有不同的方法體 簡單舉例為 classhorse mammal,ilangbound public int numeroflegs return 4 inte ce ilandbound int numberoflegs 介面例子 main函式 ...

抽象類與介面

記住抽象類與普通類的唯一區別就是不能建立例項物件和允許有abstract 方法含有abstract 修飾符的 class 即為抽象類,abstract 類不能建立的例項物件。含有 abstract 方法的類必須定義為 abstract class abstract class 類中的方法不必是抽象的...