2010-11-10 50 views
4

最後幾天,我常常遇到「實現接口」這個術語...我有一個想法是什麼,但我想了解更多信息和一些關於它的資源。什麼時候一個類實現一個接口?「實現接口」究竟意味着什麼?

+2

這是一個騙局......更不用說這個Google上無數的非SO源會發現如果問。 – delnan 2010-11-10 15:33:16

+1

爲什麼你不提供鏈接呢? – rabidmachine9 2010-11-10 15:35:07

+2

Like [面向對象編程中接口的定義是什麼](http://stackoverflow.com/q/2866987/15880)? – Powerlord 2010-11-10 15:43:30

回答

4

一個接口是一個合同,指定所要求的組,類必須創建方法。

例如:

public interface ITest 
{ 
    public void DoSomething(int someInt); 
} 

public class MyClass : ITest 
{ 
    public void DoSomething(int someInt) 
    { 
     ... Do some stuff 
    } 
} 

如果不包括DoSomething方法,編譯器將拋出一個錯誤。

0

接口通常是功能,他們需要作爲參數,他們將返回的內容的說明。描述如何使用函數以及您可能期望從中返回的內容。

實現接口意味着實際編寫一些代碼來實現接口的描述,在功能名稱,屬性和返回值。

0

接口爲您的代碼添加透明度。一個接口定義了一個由類實現的合約。假設我告訴你,你可以成爲我的幫派的一部分,但你一直需要穿綠色襯衫。如果你說是,那麼你正在執行合同,現在你必須一直穿綠色的襯衫。

2

接口是類必須實現的功能的規範。當你實現一個接口時,你要爲你的類的任何消費者指定你提供給定接口中定義的功能。例如(在C#):

public interface ISearchable 
{ 
    List<object> Search(string query); 
} 

ISearchable是指定一個單一的方法,該方法,在理論上,應該提供一類一些搜索功能的接口。現在,要實現搜索功能的任何類可以實現ISearchable接口:

public class ConcreteSearchable : ISearchable 
{ 
    public List<object> Search(string query) 
    { 
     // Implementation 
    } 
} 

您現在有一個實現你的ISearchable接口的類。這提供了幾個好處。首先,你明確地聲明瞭你的類的某些行爲。其次,你現在可以將你的類(和其他接口的實現)多態化。

例如,如果執行ISearchable接口的類型很多,則可以創建SearchableFactory,它將根據某些參數構造具體類型。工廠的消費者不會在意具體類型......只要他們可以搜索一下:

public class SearchableFactory 
{ 
    public static ISearchable CreateInstance(string query) 
    { 
     if(query.Contains("SELECT")) 
      return new SqlSearchable(); 
     else 
      return new ConcreteSearchable(); 
    } 
} 
2

的接口是一類需要實現的方法的列表。這是一種解耦類與類提供什麼服務的工作方式。

您可以想象一個堆棧數據結構。它可能在其界面如下:

push(Node); 
Node pop(); 
Node peek(); 

現在,如果你使用一個數組來實現你保住的索引到一個數組堆棧,並用它來執行操作。如果你有一個鏈表,你只需要一個指向頭部的指針。接口的要點是,只要您的實現提供了所需的方法,您的實現的用戶不需要知道您的實現類如何工作。

某些語言(如Java和C#)提供了明確的interfaces。其他人,比如ruby或者python,可以讓你使用相同的技術,但是不能用關鍵字來強制執行。您可能會聽到術語Duck Typing。這是一種說法,如果某件事實現了正確的接口,則可以使用它,而不管實現如何。

1

實現接口是什麼意思?

如果我們從一個接口開始,然後再着手實現其中的一種方法,那麼也許是最好的。

例子#1:

每一個麥當勞在世界上具有一定的共性。事實上,如果你想運行一個麥當勞的特許經營,你必須按照他們的加盟商規則:

  1. 割愛巨無霸。
  2. 餐廳必須有一個大M
  3. 必須支付加盟商費用。
  4. 餐廳必須始終保持清潔(原文!?)。

這些是他們的規則。它在合同中。每家餐廳都必須遵守該合同。每家餐廳都略有不同,但在上述規則中都是一樣的。

這對客戶來說也是一件好事。如果你走進世界上任何一家麥當勞餐廳,你肯定知道你可以購買一臺巨無霸。

麥當勞與接口有什麼關係?

「接口」只不過是一個合同。任何「實施」或簽署合同的餐館都必須遵守。或者換句話說,任何實施麥當勞加盟商界面的餐廳都必然會遵循它。

爲什麼它被稱爲IMcDonald的界面而不是麥當勞界面?

當你命名一個接口時,名稱以「I」開始的習慣是常見的。

例2

世界上所有的飛機有一定的共性,不管是什麼類型。換句話說,他們都實現了Iplane接口。

的IPLANE接口規定,它實現任意平面它必須有:

  1. 兩翼
  2. 發動機
  3. ,它必須飛

因此,如果波音737以下這些規則,作爲一個客戶,你保證你的購買將有翅膀,並會飛。下面是一個波音737實現上述接口的例子:

public interface IPlane 
{ 
    void Fly(); 
    void HasTWoWings(); 
    void Engine(); 
} 

class Boeing737 : IPlane // <-------------- the Boeing 737 implements the interface 
{ 
    // this means that the Boeing737 MUST have a fly, hastwowings and an engine method. 
    // the interface doesn't specify HOW the plane must fly. So long as it does fly 
    // the compiler doesn't care. 


    public void Fly() 
    { 
     Console.WriteLine("Come fly with me, let's fly, let's fly awaaaaaaaay"); 
    } 

    public void HasTWoWings() 
    { 
     Console.WriteLine("I've got two wings"); 

    } 

    public void Engine() 
    { 
     Console.WriteLine("BRrrrrrrrooooooooooooooooooooooooooooooooom!"); 
    } 
} 

我希望幫助你的鄉親。

那麼這有什麼用?

如果您想要預訂飛機的乘客,這變得非常方便。你不確定哪些飛機會爲你提供。只要它們是飛機,只要它們飛行,並且有兩個機翼和一個引擎,你就不會在乎。當你在機場時,你可能會得到一架波音飛機,或者你可能會獲得空中客車,或者你可能會得到一個斯蒂格 - 但是你知道,不管你獲得什麼樣的飛機,他們都會從事某項工作。他們可能以不同的方式飛行,但他們都飛。

這使您可以以這種方式編寫代碼,從而最大限度地降低維護成本並使修改更容易,而不會導致錯誤。

相關問題