C 多型實現之介面

2021-06-16 20:16:32 字數 3278 閱讀 7127

1、什麼是介面?

介面就是一種規範,協議(*),約定好遵守某種規範就可以寫通用的**,定義了一組具有各種功能的方法。(只是一種能力,沒有具體實現,像抽象方法一樣,「光說不做」)

2、介面存在的意義:多型。多型的意義:程式可擴充套件性。最終→節省成本,提高效率。

示例1:

控制台應用程式中新建「iflyable」「ianimal」兩個類檔案,原始碼如下:

iflyable.cs原始碼:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace _10介面

}public inte***ce iplay

}public class person : iflyable

public string name}}

//多實現語法:public class 類名:父類名,介面名1,介面名2【用逗號隔開】【注意:繼承的父類寫在第乙個位置】

public class chinese : person, iflyable, iplay

public void play()

public string name1}}

}

ianimal.cs原始碼:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace _10介面

}//當多個型別,都具有某個或某幾個功能時(方法),但是這幾個型別又分屬於不同的系列(這幾個型別沒有共同的父類,這時就不能用抽象類了。),

//所以這時,為了實現多型就可以考慮把這幾個型別共有的方法提取到乙個介面中,讓這幾個型別分別實現該介面。

/// /// 定義介面

///

public inte***ce iflayble

/// /// brid子類:繼承ianimal父類,實現iflayble介面

///

public class brid : ianimal, iflayble

}public class plan : iflayble }}

主程式「program」中的原始碼:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace _10介面}}

結果輸出如下:

示例2:介面之間的繼承

控制台應用程式,program.cs原始碼:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace _11介面之間的繼承

}public inte***ce iflyable

public inte***ce iswimable

public inte***ce istudy

//介面與介面之間的繼承

public inte***ce isupperstudent : iflyable, iswimable, istudy

//類與介面之間叫做「實現」

public class student : isupperstudent

public void swim()

public void xuexinet()

}//子類beststudent繼承student父類,實現isupperstudent介面,即iflyable, iswimable, istudy介面

public class beststudent : student

}

結果輸出如下:

虛方法、抽象類、介面歸納:

//面向抽象程式設計,使用抽象(父類、抽象類、介面)不使用具體。「向上轉型」

//在程式設計時:

//1.介面→抽象類→父類→具體類(在定義方法引數、返回值、宣告變數的時候能用抽象就不要用具體。)

//2.能使用介面就不用抽象類,能使用抽象類就不用類,能用父類就不用子類。

//3.避免定義「體積龐大的介面」、「多功能介面」,會造成「介面汙染」。只把相關聯的一組成員定義到乙個介面中(盡量在介面中少定義成員)。單一職責原則

//4.定義多個職責單一的介面(小介面)(組合使用)。(印刷術與活字印刷術)

//a.抽象類和介面的區別?

//介面定義類的公共行為,抽象類定義類的公共實現

//乙個類只能繼承自乙個類(抽象類),但是可以同時實現多個介面

//介面中不能有實現,抽象類中可以有未實現成員也可以有實現的成員

//介面中未實現的方法必須在子類中實現,抽象類中未實現的成員必須在子類中重寫

//好的介面定義應該是具有專一功能性的,而不是多功能的,否則造成介面汙染。如果乙個類只是實現了這個介面的中乙個功能,而不得不去實現介面中的其他方法,就叫介面汙染。   

//b.什麼時候使用抽象類,什麼時候使用介面?

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

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

//2. 就像鐵門木門都是門(抽象類),你想要個門我給不了(不能例項化),

//但我可以給你個具體的鐵門或木門(多型);而且只能是門,你不能說它是窗(單繼承);乙個門可以有鎖(介面)也可以有門鈴(多實現)。

//門(抽象類)定義了你是什麼,介面(鎖)規定了你能做什麼(乙個介面最好只能做一件事,你不能要求鎖也能發出聲音吧(介面汙染))。

介面實現多型

由於繼承有單根性這乙個特點,也就是說乙個類只能繼承與乙個父類,但是有時候我們需要繼承多個類,那莪這樣就有了介面的出現,介面實現讓乙個類可以繼承多個類,繼承的多個類實際上就是繼承的介面 介面使用inte ce關鍵字來表示乙個類是乙個幾介面 介面的特點 1 介面中的成員不能有任何實現 光說不做 只是定義...

C 中的介面實現多型

我們都知道虛方法實現多型,抽象方法實現多型等,我們今天來看看如何使用介面實現多型 1.首先我們先要來了解了解什麼是介面,它存在的意識 01.介面就是為了約束方法的格式 引數和返回值型別 而存在的 02.介面可以實現多繼承,彌補單繼承的缺陷。03.介面可以看成是乙個特殊的抽象類,通過反編譯看原始碼可知...

c 多型與介面

靜態聯編 static binding 在編譯階段,確定函式的跳轉位址.早期聯編.動態聯編 dynamic binding 在執行階段,根據指向的物件,動態地確定跳轉位址.晚期聯編.include using namespace std class animal 介面 純虛函式 純虛函式主要用來實現...