介面和抽象類 設計角度來分析

2021-10-07 15:27:35 字數 1355 閱讀 1081

1.抽象類和介面的語法特性

抽象類不允許被例項化,只能被繼承.它可以包含屬性和方法.方法既可以包含**的實現,也可以不包含**的實現.不包含**的實現叫做抽象方法.介面不能包含屬性,只能宣告方法,方法不能包含**實現.類實現介面的時候,必須實現介面中宣告的所有方法.

2.抽象類和介面存在的意義

抽象類是對 成員變數和方法的抽象,是一種is-a關係,是為了解決**復用問題.介面僅僅是對方法的抽象,是一種has-a的關係,表示具有一組行為特性,是為了解決解耦問題,隔離介面和具體的實現,提高diamante的擴充套件性.

3,抽象類和介面的應用場景和區別

什麼時候該用抽象類?設麼時候該用介面?實際上,判斷的標準很簡單.如果表示一種is-a 的關係,並且是為了解決**的復用問題,我們就用抽象類;如果要表示一樣has-a關係,並且是為了解決抽象而非**復用問題,我們就用介面.

如果讓我聊聊介面和抽象類,我會這麼聊:定義,區別(是什麼),存在意義(從哪來),應用(到哪去)

1.定義:

抽象類:不允許例項化,只能被繼承;可包含屬性和方法,包含抽象方法;子類繼承抽象類必須重寫抽象方法

介面:不允許例項化,只能被實現;不包含屬性和普通方法,包含抽象方法,靜態方法,default方法,類實現介面時,必須實現抽象方法.

2.意義:

抽象類:解決復用問題,適合於is-a關係.

介面:解決抽象問題,適合has-a關係.

3應用:.....

抽象類使用例子:

**復用(三個具有相同性質的類直接繼承抽象類獲取他的抽象定義方法,例如本科專科  抽象類為學生,使用的時候不需要建立多個物件)

抽象類的訪問修飾符 為protected  同包下使用

//定義乙個動物抽象類  裡面有乙個eat的方法和doinit抽象方法

//實現這個animal的類必須實現doinit方法 呼叫eat方法的話直接在使用的地方eat();

順便寫個列舉:

enum test

public string getkey()

public string getvalue()

//根據key值得到他的value值

public static string getvaluebycode(string code)

return null;

}test.getvaluebycode("1") // one

(抽象)類和介面細節分析

抽象類是否可繼承介面?抽象類裡面可以包括抽象方法和非抽象方法,而介面只是定義了方法的原型,沒有方法的具體定義。從這方面來分析,抽象類是可以繼承介面的。抽象類繼承介面後,一定要實現介面中的成員方法麼?答案是否定的。抽象類繼承介面後,可以實現介面中的成員方法,也可以不實現。如果不實現介面中成員方法,只需...

介面和抽象類

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

抽象類和介面

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