淺談 接口(Interface)的作用

2006年9月25日
繼承"基類"跟繼承"接口"都能實現某些相同的功能,但有些接口能夠完成的功能是隻用基類無法實現的
 
1.接口用於描述一組類的公共方法/公共屬性. 它不實現任何的方法或屬性,只是告訴繼承它的類
《至少》要實現哪些功能,繼承它的類可以增加自己的方法.

2.使用接口可以使繼承它的類: 命名統一/規範,易於維護.比如:  兩個類 "狗"和"貓",如果它
們都繼承了接口"動物",其中動物裏面有個方法Behavior(),那麼狗和貓必須得實現Behavior()方法,
並且都命名爲Behavior這樣就不會出現命名太雜亂的現象.如果命名不是Behavior(),接口會約束
即不按接口約束命名編譯不會通過.

3.提供永遠的接口。 當類增加時,現有接口方法能夠滿足繼承類中的大多數方法,沒必要
  重新給新類設計一組方法,也節省了代碼,提高了開發效率.
  舉個代碼示例:
 
  //公共接口: "動物"
  public Interface IAnimal
  {
      int EyeNumber;
      private void Behavior();  //行爲方法,描述各種動物的特性
  }

  //類: 狗
  public Dog : IAnimal
  {
      string ActiveTime = "白天";
      private void Behavior()
      {               {
         Console.Write("我晚上睡覺,白天活動");
      }
  }

  //類: 貓
  public Cat: IAnimal
  {
      string ActiveTime = "夜晚";
      private void Behavior()
      {               {
         Console.Write("我白天睡覺,晚上活動");
      }
  }


  //簡單的應用:
  public static Main()
  {
      Dog myDog = new Dog();
      myDog.Behavior();   //輸出: "我晚上睡覺,白天活動"
      Cat myCat = new Cat();
      myCat.Behavior();   //輸出: "我白天睡覺,晚上活動"
  }
  以上調用不同的類的相同名方法,會輸出不同的東東,也就是說每個類裏面的同名方法完成的
  功能可以是完全不同的.

 

  更進一步,不是用上面Main方法這樣一個一個調用類的方法,用多態性實現其調用.
  看一下下面這個方法:
  public Behavior(IAnimal myIanimal)
  {
      myIanimal.Behavior();
  }

  其參數是<<接口類型>>,任何繼承它的類都可以調用此方法,此方法能根據類的不同調用不同的類
  中的方法. 也即能夠自己根據不同的類,完成不同的類的功能.
  多態性代碼示例: 
  Dog myDog = new Dog();
  Cat myCat = new Cat();
  Behavior(myDog);  //Behavior接受“狗”類實例
  Behavior(myCat);  //Behavior接受“狗”類實例

  這樣Behavior方法寫一次就能完成所有繼承它的類中的相同名方法的不同功能. 非常方便,

  同樣,由於“動物軟件”功能需求,需要再增加一個"龜"類:
  //類: 龜
  public Tortoise: IAnimal
  {
      string ActiveTime = "很難說";
      private void Behavior()
      {               {
         Console.Write("我可以不活動,一睡就睡五千年!");
      }
  }
  那麼也可以調用上面多態方法,所以說接口使方法具有較好擴展性.
  如果繼承它的類很多的話,有多少好處是可想而知的!

 另外, 也有抽象類能夠實現但接口不能實現的情況:

   1. 在抽象類中可以加代碼邏輯,但接口不能.   

  2. 如果要在接口中增加一個方法, 所有實現它的類都強制重載一遍此方法, 如果重載類很多時, 會增大工作量.

 總之, 一般在僅實現單繼承用途時, 儘量用抽象類, 功能也更強些!


  上面是個人對接口某些方面的一些認識,當然接口的作用不只是這些.
  不對的地方請讀者批評指正! 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章