接口實現多態


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

  

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM