實現多型之介面
阿新 • • 發佈:2021-10-18
介面
是一種規範,是一種約定,約定必須要具備的功能
接口裡邊的方法預設都是公共的,預設都是抽象的,所以定義的時候只需要定義返回值方法名引數,public和abstract會自動加上。
介面的特點
1、介面中的成員不能有任何實現(“光說不做”,只是定義了一組未實現的成員),接口裡邊的方法都是抽象的,不能有方法體。
2、為了多型,介面不能被例項化。
3、介面中只能有方法、自動屬性、索引器、事件,不能有“欄位”和建構函式。
4、介面與介面之間可以繼承,並且可以多繼承。
5、只要一個類繼承了一個介面,這個類就必須實現這個介面中所有的成員
6、介面並不能去繼承一個類,而類可以繼承介面
7、一個類可以同時繼承一個類並實現多個介面,如果一個子類同時繼承了父類A,並實現了介面IA,那麼語法上A必須寫在IA的前面,因為類是單繼承的。
class MyClass:A,IA{}
介面和抽象類的異同點:
相同點:都是一種約定,約定必須要具備的功能。繼承抽象類必須要重寫裡邊所有的抽象方法,實現介面也必須實現接口裡邊的方法。
不同點:
1:接口裡邊不能有普通方法,但是抽象類可以
2:抽象類只能單一的繼承,介面是可以多實現的
介面基本使用
public interface IFlyble { void Fly(); } public class brid : IFlyble { public void Fly() { Console.WriteLine("我是鳥,我可以飛"); } }
介面的多繼承
public interface M1 { void Test1(); } public interface M2 { void Test2(); } public interface M3 { void Test3(); } public interface SuperM : M1, M2, M3 { } public class Person : SuperM { public void Test1() { } public void Test2() { } public void Test3() { } }
顯示實現介面
顯示實現介面的目的:解決方法的重名問題
什麼時候顯示的去實現介面:
當繼承的藉口中的方法和引數一摸一樣的時候,要是用顯示的實現介面
//介面
public interface IFlyable
{
void Fly();
}
public class Brid : IFlyable
{
public void Fly()
{
Console.WriteLine("我是鳥自己的飛");
}
//顯示實現介面
void IFlyable.Fly()
{
Console.WriteLine("我是介面的飛");
}
}
呼叫的時候根據里氏轉換給之類即可
IFlyable brid = new Brid();
//呼叫介面的飛
brid.Fly();
//呼叫自己的飛
((Brid)brid).Fly();