抽象類與介面

2021-06-27 08:45:29 字數 2738 閱讀 5172

參考文章:

一、抽象方法:好處:靈活的實現程式碼的重用,子類重寫(override);抽象的目的是我無法實現它,由繼承我的類來實現

1、a、抽象類的方法必須是抽象方法,不然報錯;

b、屬性不一定要為抽象屬性。

2、 a、乙個類只能繼承乙個抽象類; b、

abstract 與private、virtual、static不能同時使用;

c、抽象類不能例項化。

3、抽象類的抽象方法、抽象屬性在其一般子類中必須重寫(重寫訪問性要一致),且抽象屬性的讀、寫情況要一致。

4、抽象類的抽象方法、抽象屬性在其抽象子類中不一定要重寫,但重寫的必須要實現,未重寫的在其子類中必須重寫實現。

5、繼承抽象類的子類可以再次重寫繼承抽象類繼承的方法屬性。

6、 不能對欄位抽象(因為字段只能用等號賦值,沒其他**(不同於屬性),沒啥抽象的意義)。

例子:public abstract class phoneabsstract

//抽象類的方法必須是抽象方法,不然報錯;屬性不一定要為抽象屬性。

set

}public abstract int weight

}public class phone1 : phoneabsstract

//抽象類的抽象方法、抽象屬性在其一般子類中必須重寫(重寫訪問性要一致),且抽象屬性的讀、寫情況要一致。

public override void 照相()

public override void 上網()

private int _weight = 0;

public override int weight }}

public abstract class iphoneabstract : phoneabsstract

//抽象類的抽象方法、抽象屬性在其抽象子類中不一定要重寫,但重寫的必須要實現

public override void 上網()

//繼承抽象類的子類可以再次重寫繼承抽象類繼承的方法屬性。

private int _weight = 0;

public override int weight

}    

}public class iphone1 : iphoneabstract

//未重寫的在其子類中必須重寫實現

public override void 照相()

}二、介面:實現多型;介面的目的是提供乙個標準讓大家來遵守,不用知道大家如何實現;簡單工廠模式應用(利用多型);

1、介面只能是public,實現介面也必須public;

2、能實現多個介面,但繼承的所有介面的方法必須都要實現;

例子:簡單工廠模式

class program

} public class ******nessfactory//簡單工程模式應用介面

} public inte***ce 通話裝置介面//介面只能public

public inte***ce 照相裝置介面

}public inte***ce 上網裝置介面

public class phone1 : 通話裝置介面//實現介面的類必須public

}public class phone2 : 通話裝置介面, 照相裝置介面, 上網裝置介面//能實現多個介面,但繼承的所有介面的方法必須都要實現

public void 照相()

public void 上網()

public int size

}//屬性也必須實現,其必須是public

}public class camera : 照相裝置介面

public int size

}//屬性也必須實現,其必須是public

}

三、抽象類與介面區別:

1、乙個類一次可以多個介面,但只能實現乙個抽象類。

2、 抽象類實現的具體方法預設為虛的,但實現介面的類中的介面方法卻預設為非虛的,當然您也可以宣告為虛的

3、 (介面)與非抽象類類似,抽象類也必須為在該類的基類列表中列出的介面的所有成員提供它自己的實現。但是,允許抽象類將介面方法  

對映到抽象方法上。

4、好的介面定義應該是具有專一功能性的,而不是多功能的,否則造成介面汙染。

四、抽象類和介面的使用:

1. 如果預計要建立元件的多個版本,則建立抽象類。抽象類提供簡單的方法來控制項版本。

2.如果建立的功能將在大範圍的全異物件間使用,則使用介面。如果要設計小而簡練的功能塊,則使用介面。

3.如果要設計大的功能單元,則使用抽象類.如果要在元件的所有實現間提供通用的已實現功能,則使用抽象類。

4.抽象類主要用於關係密切的物件;而介面適合為不相關的類提供通用功能。

以下是我在網上看到的幾個形象比喻,真的非常不錯,呵呵:

1.飛機會飛,鳥會飛,他們都繼承了同乙個介面「飛」;但是f22屬於飛機抽象類,鴿子屬於鳥抽象類。

2. 就像鐵門木門都是門(抽象類),你想要個門我給不了(不能例項化),但我可以給你個具體的鐵門或木門(多型);而且只能是門,你不能說它是窗(單繼承);乙個門可以有鎖(介面)也可以有門鈴(多實現)。門(抽象類)定義了你是什麼,介面(鎖)規定了你能做什麼(乙個介面最好只能做一件事,你不能要求鎖也能發出聲音吧(介面汙染)。

介面與抽象類

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