我們都知道虛方法實現多型,抽象方法實現多型等,我們今天來看看如何使用介面實現多型
1.首先我們先要來了解了解什麼是介面,它存在的意識
01.介面就是為了約束方法的格式
(引數和返回值型別
)而存在的
02.介面可以實現多繼承,彌補單繼承的缺陷。
03.介面可以看成是乙個特殊的抽象類,通過反編譯看原始碼可知
04.介面中方法不用訪問修飾符,因為
clr會自動新增,並且不能有方法體
05.如果乙個類實現了某個介面,就得實現該介面中所有的方法
06.介面要謹慎使用,防止出現介面汙染!
07.介面僅僅代表一種能力,實現該介面的類和介面沒有繼承關係
08.介面是用來實現的,類是用來繼承的。
09.其實很多時候,看似可以不用介面,因為介面就是乙個方法的約定,
表明你這個類必須要有某些方法,但是不寫介面也可以有這些方法,用了介面,
就可以使用介面變數,統一呼叫,實現多型
10.介面中只能定義方法,不能定義變數。
2.抽象類和介面的區別:
當需要的各個物件之間存在父子類關係時,可以考慮使用抽象類,
當各個物件之間不存在繼承關係,只是有相同的能力時,而已考慮使用介面
3.介面的通俗理解
01.飛機會飛,鳥會飛,他們都繼承了同乙個介面「飛」;但是
f22屬於飛機抽象類,
鴿子屬於鳥抽象類。
02.就像鐵門木門都是門(抽象類),你想要個門我給不了(不能例項化),
但我可以給你個具體的鐵門或木門(多型);而且只能是門,你不能說它是窗(單繼承);
乙個門可以有鎖(介面)也可以有門鈴(多實現)。
門(抽象類)定義了你是什麼,介面(鎖)規定了你能做什麼
(乙個介面最好只能做一件事,你不能要求鎖也能發出聲音吧(介面汙染))
下面我們舉個用介面實現多型的例子:
01.新建乙個飛的介面
using02.建立乙個吃的介面system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
介面}
using03.建立乙個鳥類來實現飛的介面和吃的介面system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
介面}
using04.建立乙個飛機類實現飛的介面system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
介面
public
void
eat()}}
using05.在main方法實現呼叫system;
using
system.collections.generic;
using
system.globalization;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
介面 }
}
using這樣就可實現多型了,執行結果如下:system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace介面;
//迴圈陣列呼叫方法實現多型
foreach (ifly ifly in
iflies)
//鳥吃例項化物件
ieat ieats = new
grid();
//呼叫方法實現多型
ieats.eat();
console.readline();}}
}
注:如果有乙個類要實現兩個介面,不巧的是這兩個介面(如:ifly,iplay)中右兩個同命名的方法(eat)
我們都知道
如果乙個類實現了某個介面,就得實現該介面中所有的方法
這怎麼辦吶?自有解決的方法的:
我們就可以使用介面名.方法來實現
//4.介面總結(摘錄):實現了ifly和iplay兩個介面,但兩個介面中都有eat方法
public
class
dog:ifly,iplay
void
iplay.eat()
}
介面是元件之間的協議,描述了元件對外提供的服務。從技術上講介面是一組包含了函式型方法的資料結構。 通過這組資料結構,客戶**可以呼叫元件物件的功能。介面可以從父介面中繼承。介面的繼承首先是說明性繼承,不是實現性繼承,它的實現需要通過類或結構來實現;其次介面繼承可以是多繼承。
屬性的本質是方法,索引器的本質是屬性。
介面包含的成員有方法、屬性、索引指示器和事件。由於介面允許多繼承,在可能發生二義性的地方可以採用全權名來避免。可以用類來實現介面。在類中定位介面成員的實現稱之為介面對映。類必須為介面的所有成員提供具體的實現,包括介面中顯式定義的成員, 以及介面從父介面中繼承而來的成員。同樣,在對介面的實現過程中可以採用顯式介面成員執行體來避免產生二義性。派生類可以對基類已經實現的介面進行重實現。
抽象類也可以實現介面,但介面成員必須對映到抽象類的抽象成員。抽象類的派生類如果是非抽象類,則必須通過方法過載來實現介面成員。
C 多型實現之介面
1 什麼是介面?介面就是一種規範,協議 約定好遵守某種規範就可以寫通用的 定義了一組具有各種功能的方法。只是一種能力,沒有具體實現,像抽象方法一樣,光說不做 2 介面存在的意義 多型。多型的意義 程式可擴充套件性。最終 節省成本,提高效率。示例1 控制台應用程式中新建 iflyable ianima...
介面實現多型
由於繼承有單根性這乙個特點,也就是說乙個類只能繼承與乙個父類,但是有時候我們需要繼承多個類,那莪這樣就有了介面的出現,介面實現讓乙個類可以繼承多個類,繼承的多個類實際上就是繼承的介面 介面使用inte ce關鍵字來表示乙個類是乙個幾介面 介面的特點 1 介面中的成員不能有任何實現 光說不做 只是定義...
C 中多型的實現
物件導向語言的主要特點是 封裝性 繼承性 多型性。其中,封裝性使得 模組化,繼承性完成 的復用,多型實現介面的重用。在c 中,多型性是指具有不同功能的函式用同乙個函式名。即用同乙個函式名,呼叫不同內容的函式。下面主要從多型的實現分析c 中的多型。多型的實現有兩種方式 靜態聯編和動態聯編。系統在編譯的...