接口如何實現多態
阿新 • • 發佈:2018-04-11
console throw 不同 這一 num XP 不用 我不知道 exceptio
由於繼承有單根性這一個特點,也就是說一個類只能繼承與一個父類,但是有時候我們需要繼承多個類,那莪這樣就有了接口的出現,
接口實現讓一個類可以繼承多個類,繼承的多個類實際上就是繼承的接口
接口使用interface關鍵字來表示一個類是一個幾接口
接口的特點
1、接口中的成員不能有任何實現(“光說不做”,只是定義了一組未實現的成員)
2、為了多態。接口不能被實例化。也就是說,接口不能new(不能創建對象)
3、只要一個類繼承了一個接口,這個類就必須實現這個接口中所有的成員
4、接口中的成員不能加“訪問修飾符”,接口中的成員訪問修飾符默認為public,且不能修改。
5、接口中只能有方法、屬性、索引器、事件,不能有“字段”和構造函數。
6、接口與接口之間可以繼承,並且可以多繼承
7、接口並不能去繼承一個類,而類可以繼承接口 (接口只能繼承於接口,而類既可以繼承接口,也可以繼承類)
8、一個類可以同時繼承一個類並實現多個接口,如果一個子類同時繼承了父類A,並實現了接口IA,那麽語法上A必須寫在IA的前面。
//真的鴨子會遊泳 木頭鴨子不會遊泳 橡皮鴨子會遊泳
//不同的鴨子遊泳的方式不一樣,所以在父類中我不知道怎麽實現,所以這裏考慮使用接口的方法
public interface ISwimming
{
void Swim();
}
public class RealDuck:ISwimming
{
public void Swim()
{
Console.WriteLine("真的鴨子靠翅膀遊泳");
}
}
public class XPDuck : ISwimming
{
public void Swim()
{
Console.WriteLine("橡皮鴨子飄著遊泳");
}
}
public class MuDuck
{
//這裏因為木頭鴨子不會遊泳,所以不繼承接口也就不用實現接口中的方法
}
同樣我們在Main方法中調用一下
static void Main(string[] args){
ISwimming swim = new XPDuck();//new RealDuck();
swim.Swim();
//橡皮鴨子飄著遊泳
}
其實會發現接口和抽象類實現多態很相似,只是接口更加註重的是方法的實現
上面提到接口和接口之間可以繼承,並且接口可以繼承多個接口,那麽如果一個類繼承了一個有多繼承的接口時,這個類中需要將所有繼承鏈上的方法全部實現
就像下面醬紫————————
public interface M1
{
void Test1();
}
public interface M2
{
void Test2();
}
public interface M3
{
void Test3();
}
//下面這個接口繼承了多個接口
public interface SupperInterface : M1, M2, M3
{
}
//這個類繼承了一個有多個繼承的接口,所以需要實現繼承鏈上的所有方法
public class Car : SupperInterface
{
public void Test1()
{
throw new NotImplementedException();
}
public void Test2()
{
throw new NotImplementedException();
}
public void Test3()
{
throw new NotImplementedException();
}
}
接口如何實現多態