-
1 # 小白程式設計入坑
-
2 # 小紅的甜心
抽象類和介面
什麼是介面:介面就是一些方法特徵的集合------介面是對抽象的抽象。
什麼是抽象類:抽象類對某具體型別的部分實現------抽象類是對具體的抽象。
方法特徵包括:方法的名字、引數的數目、引數的型別。不包括:返回型別、引數名字、和丟擲的異常。
介面是型別轉換的前提、是動態呼叫的保證。實現某一介面就完成了型別的轉換(多重繼承);動態呼叫只關心型別,不關心具體類。
--------------------------------------------------------------------------------------------------------------------------------------
java介面(抽象類)用來宣告一個新的型別。
Java設計師應當主要使用介面和抽象類將軟體單位與內部和外部耦合起來。
換言之,應當使用java介面和抽象類而不是具體類進行變數的型別宣告、引數的型別宣告、方法的返回型別宣告、以及資料型別的轉換等。
當然一個更好的做法是僅僅使用介面,而不是抽象類來做上面這些事情。
在理想的情況下,一個具體類應當只實現介面和抽象類中宣告的方法,而不應當給出多餘的方法!
介面和抽象類一般作為一個型別等級結構的起點。
介面比抽象類更為抽象所以優先使用介面宣告抽象型別!
--------------------------------------------------------------------------------------------------------------------------------------
抽象類和介面
抽象類僅提供一個類的部分實現。抽象類可以有例項變數、以及一個或多個建構函式。抽象類可以同時又抽象方法和具體方法。
一個抽象類不會有例項,它的建構函式不能被客戶端用來建立例項。一個抽象類的建構函式可以被其子類呼叫,從而使一個抽象類的所有子類可以有一些共同的實現,而不同的子類可以在此基礎上有不同的實現。
介面比抽象類更為抽象所以有線使用介面宣告抽象類!
抽象類是用來繼承的。(具體類不是用來繼承的,“只要有可能不要從具體類繼承---scott meryes”)。
抽象類設計原則:
1. 抽象類應當擁有儘可能多的程式碼!(公用方法)。程式碼集中於抽象的方向。
2. 抽象類應當擁有儘可能少的資料!(公共屬性)。資料集中於具體的方向。
繼承複用的使用條件------- Peter Coad條件
1. 子類是超類的一個特殊種類而不是超類的一個角色!正確區分“Has-A”“Is-A”的關係。
2. 子類之間不應發生替換!?
3. 子類具有擴充套件超類的責任,而不是置換(Override)掉或登出(Nullify)掉的責任。
4. 只有在分類學角度上有意義時才可以使用繼承,不要從具體類繼承。
介面和抽象類的區別:
1. 抽象類可以提供某些方法的實現。如果向抽象類中加入一個新的具體的方法,那麼所有的子類一下子就得到了這個方法。介面做不到這一點!(這也許是抽象類的唯一優點)。
2. 因java的單根結構限制,只類只能實現一個抽象類型別,而介面型別這無此限制。這使抽象類作為型別定義工具的效能落後於介面。介面是定義混合型別(實現多從繼承)的理想工具:用一個
3. 從程式碼重構的角度上講,將一個具體類重構成一個介面的實現是很容易的。
研究好這中間的差別很有用的!
回覆列表
Java介面是一系列方法的宣告,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
介面作用如下:
1、豐富Java面向物件的思想:在Java語言中, abstract class 和interface 是支援抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的面向物件能力。
2、提供簡單、規範性:如果一個專案比較龐大,那麼就需要一個能理清所有業務的架構師來定義一些主要的介面,這些介面不僅告訴開發人員你需要實現那些業務,而且也將命名規範限制住了(防止一些開發人員隨便命名導致別的程式設計師無法看明白)。
3、提高維護、拓展性:比如你要做一個畫板程式,其中裡面有一個面板類,主要負責繪畫功能,然後你就這樣定義了這個類,可是在不久將來,你突然發現這個類滿足不了你了,然後你又要重新設計這個類,更糟糕是你可能要放棄這個類,那麼其他地方可能有引用他,這樣修改起來很麻煩,如果你一開始定義一個介面,把繪製功能放在接口裡,然後定義類時實現這個介面,然後你只要用這個介面去引用實現它的類就行了,以後要換的話只不過是引用另一個類而已,這樣就達到維護、拓展的方便性。
4、增強安全、嚴密性:介面是實現軟體松耦合的重要手段,它描敘了系統對外的所有服務,而不涉及任何具體的實現細節。這樣就比較安全、嚴密一些(一般軟體服務商考慮的比較多)。