1. 程式人生 > >接口如何實現多態

接口如何實現多態

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();
        }
    }

接口如何實現多態