二 抽象類與介面

2021-10-25 04:11:16 字數 4110 閱讀 1903

1、介面是一種「引用資料型別」。編譯之後也是乙個class位元組碼檔案。

2、介面是完全抽象的。或者也可以說介面是特殊的抽象類。

3、介面怎麼定義:[修飾符列表] inte***ce 介面名{}

4、介面支援多繼承。

5、介面中只有常量+抽象方法。

6、介面中所有的元素都是public修飾的

7、介面中抽象方法的public abstract可以省略。

8、介面中常量的public static final可以省略。

9、介面中方法不能有方法體。

10、乙個非抽象的類,實現介面的時候,必須將介面中所有方法加以實現。

11、乙個類可以實現多個介面。

12、extends和implements可以共存,extends在前,implements在後。

13、使用介面,寫**的時候,可以使用多型(父型別引用指向子型別物件)。

1.為了彌補類無法多繼承的缺點

2.實現多型

3. 要實現的方法(功能)不是當前類族的必要(屬性).

4. 要為不同類族的多個類實現同樣的方法(功能).

注意:介面在開發中的作用,類似於多型在開發中的作用。

多型:面向抽象程式設計,不要面向具體程式設計。降低程式的耦合度。提高程式的擴充套件力。

public

class

master

public

void

feed

(cat c)

//假設又要養其它的寵物,那麼這個時候需要再加1個方法。(需要修改**了)

//這樣擴充套件力太差了,違背了ocp原則(對擴充套件開放,對修改關閉。)

}public

class

master

}

介面在開發中的作用?

介面是不是完全的?是。

而我們以後正好要求,面向抽象程式設計。

面向抽象程式設計這句話以後可以修改為:面向介面程式設計。

有了介面就有了可插拔。可插拔表示擴充套件力很強。不是焊接死的。

主機板和記憶體條之間有插槽,這個插槽就是介面,記憶體條壞了,可以重新

買乙個換下來。這叫做高擴充套件性。(低耦合度。)

介面在現實世界中是不是到處都是呢?

螺栓和螺母之間有介面

燈泡和燈口之間有介面

膝上型電腦和鍵盤之間有介面(usb介面,usb介面是不是某個計算機協會制定的協議/規範。)

介面有什麼用?擴充套件性好。可插拔。

介面是乙個抽象的概念。

分析:

中午去飯館吃飯,這個過程中有介面嗎?

介面是抽象的。

選單是乙個介面。(選單上有乙個抽象的**:西紅柿炒雞蛋)

誰面向介面呼叫。(顧客面向選單點菜,呼叫介面。)

誰負責實現這個介面。(後台的廚師負責把西紅柿雞蛋做好!是介面的實現者。)

這個介面有什麼用呢?

這個飯館的「選單」,讓「顧客」和「後廚」解耦合了。

顧客不用找後廚,後廚不用找顧客。他們之間完全依靠這個抽象的選單溝通。

總結一句話:三個字「解耦合」

面向介面程式設計,可以降低程式的耦合度,提高程式的擴充套件力。符合ocp開發原則。

介面的使用離不開多型機制。(介面+多型才可以達到降低耦合度。)

介面可以解耦合,解開的是誰和誰的耦合!!!

任何乙個介面都有呼叫者和實現者。

介面可以將呼叫者和實現者解耦合。

呼叫者面向介面呼叫。

實現者面向介面編寫實現。

以後進行大專案的開發,一般都是將專案分離成乙個模組乙個模組的,

模組和模組之間採用介面銜接。降低耦合度。

無論向上轉型還是向下轉型,兩種型別之間必須要有繼承關係,

沒有繼承關係編譯器會報錯。(這句話不適用在介面方面。)

介面和介面之間在進行強制型別轉換的時候,沒有繼承關係,也可以強轉。

但是一定要注意,執行時可能會出現classcastexception異常。

編譯沒問題,執行有問題。

解決辦法:

//轉型之前先if+instanceof進行判斷

if(m instanceofk)

介面應用舉例:
/*

介面:選單,抽象的

*/public

inte***ce

foodmenu

//西餐廚師

// 實現選單上的菜

// 廚師是介面的實現者。

public

class

americcooker

implements

foodmenu

// 魚香肉絲

public

void

yuxiangrousi()

}

//中餐廚師

// 實現選單上的菜

// 廚師是介面的實現者。

public

class

chinacooker

implements

foodmenu

// 魚香肉絲

public

void

yuxiangrousi()

}

// 顧客

public

class

customer

public

customer

(foodmenu foodmenu)

// setter and getter

public

void

setfoodmenu

(foodmenu foodmenu)

public foodmenu getfoodmenu()

// 提供乙個點菜的方法

public

void

order()

}

public

class

test

}

1、抽象類怎麼定義?在class前新增abstract關鍵字就行了。

2、抽象類是無法例項化的,無法建立物件的,所以抽象類是用來被子類繼承的。

3、final和abstract不能聯合使用,這兩個關鍵字是對立的。

4、抽象類的子類可以是抽象類。也可以是非抽象類。

5、抽象類雖然無法例項化,但是抽象類有構造方法,這個構造方法是供子類使用的。

6、抽象類中不一定有抽象方法,抽象方法必須出現在抽象類中。

7、抽象方法怎麼定義? public abstract void dosome();

8、乙個非抽象的類,繼承抽象類,必須將抽象類中的抽象方法進行覆蓋/重寫/實現。

抽象類是半抽象的。

介面是完全抽象的

抽象類中有構造方法。

介面中沒有構造方法。

介面和介面之間支援多繼承。

類和類之間只能單繼承。

乙個類可以同時實現多個介面。

乙個抽象類只能繼承乙個類(單繼承)。

介面中只允許出現常量和抽象方法。
is a(繼承)、has a(關聯)、like a(實現)

is a:

cat is a animal(貓是乙個動物)

凡是能夠滿足is a的表示「繼承關係」

a extends b

has a:

i has a pen(我有一支筆)

凡是能夠滿足has a關係的表示「關聯關係」

關聯關係通常以「屬性」的形式存在。

a

like a:

cooker like a foodmenu(廚師像乙個選單一樣)

凡是能夠滿足like a關係的表示「實現關係」

實現關係通常是:類實現介面。

a implements b

介面與抽象類

介面與抽象類區別 個人總結 語法結構 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 類中的方法不必是抽象的...