D語言介面


介面是迫使從它繼承的類必須實現某些功能或變數的方法。函式不能在一個介面來實現,因為它們在從介面繼承的類總是執行。使用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

Final和靜態函式介面

一個介面可以有最終的和靜態方法的定義應包括在介面本身。這些功能不能過度由派生類過載。一個簡單的例子如下所示。

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