Pemrograman D - Antarmuka

Antarmuka adalah cara memaksa kelas yang mewarisinya harus mengimplementasikan fungsi atau variabel tertentu. Fungsi tidak boleh diterapkan di antarmuka karena selalu diterapkan di kelas yang diwarisi dari antarmuka.

Antarmuka dibuat menggunakan kata kunci antarmuka alih-alih kata kunci kelas meskipun keduanya serupa dalam banyak hal. Jika Anda ingin mewarisi dari sebuah antarmuka dan kelas tersebut sudah mewarisi dari kelas lain, maka Anda perlu memisahkan nama kelas dan nama antarmuka dengan koma.

Mari kita lihat contoh sederhana yang menjelaskan penggunaan antarmuka.

Contoh

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());
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

Total area: 35

Antarmuka dengan Fungsi Final dan Statis di D

Antarmuka dapat memiliki metode final dan statis yang definisi harus disertakan dalam antarmuka itu sendiri. Fungsi ini tidak dapat diganti dengan kelas turunan. Contoh sederhana ditunjukkan di bawah ini.

Contoh

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();
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

Total area: 35 
This is a static method 
This is a final method