1.什么事接口
01.接口就是為了約束方法的格式(參數和返回值類型)而存在的
02.接口可以實現多繼承,彌補單繼承的缺陷。
03.接口可以看成是一個特殊的抽象類,通過反編譯看源碼可知
04.接口中方法不用訪問修飾符,因為CLR會自動添加,並且不能有方法體
05.如果一個類實現了某個接口,就得實現該接口中所有的方法
06.接口要謹慎使用,防止出現接口污染!
07.接口僅僅代表一種能力,實現該接口的類和接口沒有繼承關系
08.接口是用來實現的,類是用來繼承的。
09.其實很多時候,看似可以不用接口,因為接口就是一個方法的約定,
表明你這個類必須要有某些方法,但是不寫接口也可以有這些方法,用了接口,
就可以使用接口變量,統一調用,實現多態。
10.接口中只能定義方法,不能定義變量。
2.抽象類和接口的區別:
當需要的各個對象之間存在父子類關系時,可以考慮使用抽象類,
當各個對象之間不存在繼承關系,只是有相同的能力時,而已考慮使用接口。
實現類 在實現接口的方法是 不需要override關鍵字
接口里定義方法直接從放回值開始 比如
void Eat();
接口底層編譯器默認加publlic abstract
3,創建一個接口的例子
//創建一個飛的接口
public interface IFly
{
//接口中方法不用訪問修飾符,因為CLR會自動添加,並且不能有方法體
void Say();
}
//創建一個吃的接口
//吃的接口
public interface IEat
{
//接口中方法不用訪問修飾符,因為CLR會自動添加,並且不能有方法體
void eat();
}
//創建一個鳥類來實現飛的接口和吃的接口
public class Bird:IFly,IEat{
public void Say()
{
Console.WriteLine("鳥在飛");
}
public void eat()
{
Console.WriteLine("鳥在吃");
}
}
//創建一個plan飛機類 實現接口飛
public class Plan{
public void Say(){
Console.WriteLine("飛機在飛");
}
}
//Test 去測試
//定義接口數組實例化對象
IFly[] ifly ={new Gird(),new Plan()};
//循環數組調用方法實現多態
foreach (IFly iFly in iFlies)
{
iFly.Say();
}
4.接口名實現 方法
注:如果有一個類要實現兩個接口,不巧的是這兩個接口(如:IFly,IPlay)中右兩個同命名的方法(Eat)
我們都知道
如果一個類實現了某個接口,就得實現該接口中所有的方法
這怎么辦吶?自有解決的方法的:
我們就可以使用接口名.方法來實現
//實現了IFly和IPlay兩個接口
public class Dog:IFly,IPlay
{
//如果一個類實現了某個接口,就得實現該接口中所有的方法
//這樣我們就可以使用接口名.方法來實現
void IFly.Say()
{
}
void IEat.Eat()
{
}
}
