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 類中的方法不必是抽象的...