介面是迫使從它繼承的類必須實現某些功能或變數的方法。函式不能在一個介面來實現,因為它們在從介面繼承的類總是執行。使用interface關鍵字代替,儘管兩者在很多方面是相似的class關鍵字建立一個介面。當你想從一個介面繼承和類已經從另一個類繼承,那麼需要單獨的類的名稱,並用逗號將介面的名稱。
讓我們來看一個簡單的例子,說明使用的介面。
import std.stdio; // Base class interface Shape { public: void setWidth(int w); void setHeight(int h); } // Derived class class Rectangle: Shape { int width; int height; public: void setWidth(int w) { width = w; } void setHeight(int h) { height = h; } int getArea() { return (width * height); } } void main() { Rectangle Rect = new Rectangle(); Rect.setWidth(5); Rect.setHeight(7); // Print the area of the object. writeln("Total area: ", Rect.getArea()); }
當上面的程式碼被編譯並執行,它會產生以下結果:
Total area: 35
一個介面可以有最終的和靜態方法的定義應包括在介面本身。這些功能不能過度由派生類過載。一個簡單的例子如下所示。
import std.stdio; // Base class interface Shape { public: void setWidth(int w); void setHeight(int h); static void myfunction1() { writeln("This is a static method"); } final void myfunction2() { writeln("This is a final method"); } } // Derived class class Rectangle: Shape { int width; int height; public: void setWidth(int w) { width = w; } void setHeight(int h) { height = h; } int getArea() { return (width * height); } } void main() { Rectangle rect = new Rectangle(); rect.setWidth(5); rect.setHeight(7); // Print the area of the object. writeln("Total area: ", rect.getArea()); rect.myfunction1(); rect.myfunction2(); }
讓我們編譯和執行上面的程式,這將產生以下結果:
Total area: 35 This is a static method This is a final method