接口(interface)是指系統的(硬件或軟件)組件和其他組件的交互點。接口使得其他組件可以在不了解該組件內部結構的情況下和它進行交互,完成特定的功能,為了能夠保證同一類型的組件之間可以替換,人們會定義一些標準接口,遵守標準接口的組件可以互相替換,給生產者和使用者都帶來方便。
分類
硬件接口
硬件接口指計算機的各個硬件組件(比如總線、內存、顯示器、輸入輸出設備)之間的交互點。例如SCIS接口標準。根據邏輯層次的不同,這些接口可以通過底層電氣信號特性或抽象邏輯信號進行描述,外界和組件的交互過程必須遵守特定的協議,這些協議定義了組件和外界進行信號交換時必須遵守的順序和規則。
軟件組件接口
軟件組件的接口指定了它和其他軟件組件之間的交互方式。軟件接口的重要作用是把組件的具體實現隱蔽起來(稱為封裝),組件的使用者只需要了解接口,而不需要知道組件的具體實現。只要兩個組件具有相同的接口,即使它們的實現不同,也可以互相替換。根據軟件組件的不同粒度,軟件接口有不同的層次。
Java里的接口
在Java語言中,接口是一個獨立的概念,它定義了一組例程的范型。但是沒有給出實現,一個接口可以由多個類實現,同時一個類也可以實現多個接口,類實現接口的條件是它實現了接口中規定的所有例程。Java中的接口實際上是一個數據類型,如果一個類實現了某個接口,那么這個類的對象就可以被賦值給類型為該接口的變量。
c中的接口
C# 語言參考
接口(C# 參考)
定義:接口是一種約束形式,其中只包括成員定義,不包含成員實現的內容。
目的:接口的主要目的是為不相關的類提供通用的處理服務,由于C#中只允許樹形結構中的單繼承,即一個類只能繼承一個父類,所以接口是讓一個類具有兩個以上基類的唯一方式。
聲明:接口聲明的方式與聲明類的方式相似,但使用的關鍵字是interface,而不是 class。
接口只包含方法、屬性、索引器和事件的簽名。方法的實現是在實現接口的類中完成的,如下面的示例所示:
interface?ISampleInterface{//interfacemembersvoid?SampleMethod();}class?Implementation?Class:ISampleInterface{//實現接口成員。void?ISampleInterface.SampleMethod(){//方法實現。Main();}static?void?Main(){//定義一個接口的實例變量obj。ISampleInterface?obj=new?ImplementationClass();//調用(obj)的成員方法。Console.Write("ok");Console.Read();}}
接口成員的定義:與類成員的定義相似,但是要注意:
不允許使用訪問修飾符(public,private,protected 或 internal),所有的接口成員都必須是公共的;
接口成員不能包含代碼實體;
接口成員不能定義字段成員;
接口成員不能用關鍵字static,virtual,abstrac t或 sealed 來定義;
類型定義成員是禁止的。
如果要隱藏繼承了基接口的成員,可以用關鍵字new來定義它們,例如:
interface?IMyBaseInterface{void?DoSomething();}interface?IMyDerivedInterface:IMyBaseInterface{new?void?DoSomething();}
備注:
接口可以是命名空間或類的成員,并且可以包含下列成員的簽名:
方法屬性索引器事件一個接口可從一個或多個基接口繼承。
當基類型列表包含基類和接口時,基類必須是列表中的第一項。
實現接口的類可以顯式實現該接口的成員。顯式實現的成員不能通過類實例訪問,而只能通過接口實例訪問,例如:
有關顯式接口實現的更多詳細信息和代碼示例,請參見顯式接口實現(C# 編程指南)。
示例
下面的示例演示了接口實現。在此例中,接口IPoint 包含屬性聲明,后者負責設置和獲取字段的值。小數點 類包含屬性實現。
//keyword_interface_2.cs//Interfaceimplementationusing?System;interfaceIPoint{//Propertysignatures:intx{get; set;}inty{get; set;}}class?Point:IPoint{//Fields:private?int?_x;private?int?_y;//Constructor:public?小數點(int?x,int?y){_x=x;_y=y;}//Propertyimplementation:public?int?x{get{return?_x;}set{_x=value;}}public?int?y{get{回車鍵?_y;}set{_y=value;}}}class?MainClass{static?void?PrintPoint(IPointp){Console.WriteLine("x={0},y={1}",p.x,p.y);}static?void?Main(){Pointp=newPoint(2,3);Console.Write("MyPoint:");PrintPoint(p);}輸出MyPoint:x=2,y=3
VBNET接口
在VB.NET的類里,實現一個接口的語句是:
implements接口名稱
例如,下面定義一個車(總稱)的接口,這里的車是各種車的總稱:
Public Interface ICar
Property color() As String
Property speed() As Long
Sub PrintInfo()
End Interface
然后在不同類型的“車”類里實現它:
Public Class A_Car
Implements ICar
3,3-二吲哚基甲烷 m_color As String, m_speed As Long
Public Property color() As String Implements ICar.color
Get
回車鍵 m_color
End Get
Set(ByVal Value As String)
m_color = Value
End Set
End Property
Protected Overrides Sub Finalize()
MsgBox("I was deconstructed!")
End Sub
Public Sub New()
m_color = "紅色"
m_speed = 210
MsgBox("I was constructed!")
End Sub
Public Property speed() As Long Implements ICar.speed
Get
回車鍵 m_speed
End Get
Set(ByVal Value As 龍姓)
m_speed = speed
End Set
End Property
Public Sub PrintInfo() Implements ICar.PrintInfo
MsgBox("Color: " & m_color & vbNewLine & "Speed: " & m_speed, MsgBoxStyle.Information)
End Sub
End Class
在 Form 的 Load 事件中編寫:
Dim Mycar As New A_Car
myCar.PrintInfo()
運行之后就創建了一個 A_Car 類的實例 myCar,然后出現兩個對話框,分別說明實例已經創建和汽車的信息。當窗體卸載時,這個類的實例 myCar 將自動銷毀,這時將出現一個“I was deconstructed!”的對話框。
聲明一個接口時,需要考慮以下幾點:
1.接口主體只限于對方法,索引器以及屬性的聲明;
2.接口成員是隱式公開的,如果對其顯式指定訪問級別,就會出現編譯器錯誤;
3.接口中不能包含字段,構造函數和常量等;
4.在接口中不能實現任何方法,屬性或者索引器;
5.在指定方法時,只需要給出返回類型,名稱和參數列表,然后分號結束。
面向對象接口
在C++中,一個類被允許繼承多個類。但是在Java以后的語言不被允許。
這樣,如果想繼承多個類時便非常困難。所以開發方想出了新辦法:接口。
一個接口內,允許包含變量、常量等一個類所包含的基本內容。但是,接口中的函數不允許設定代碼,也就意味著不能把程序入口放到接口里。由上可以理解到,接口是專門被繼承的。接口存在的意義也是被繼承。和C++里的抽象類里的純虛函數是相同的。不能被實例化。
定義接口的關鍵字是interface,例如:
publicinterfaceMyInterface{
public void add(int x,int y);
public void 容積單位(int x,int y,int z);
}
繼承接口的關鍵字是implements,相當于繼承類的extends。
需要注意的是,當繼承一個接口時,接口里的所有函數必須全部被覆蓋。例如:
class Demo implements MyInterface{
public void add(int x,int y){
System.out.println(" "+(x+y));
}
public void 容積單位(int x,int y,int z){
System.out.println(" "+(x*y*z));
}
public static void main(String args[]){
Demo d=new Demo();
d.add(10,20);
d.volume(10,10,10);
}
}
輸出結果:
30
1000
當想繼承多個類時,開發程序不允許,報錯。這樣就要用到接口。因為接口允許多重繼承(,),而類不允許。所以就要用到接口。
參考資料 >