Interface dan Abstract Class, Apa Perbedaannya?

Interface dan Abstract Class, Apa Perbedaannya?
Photo by Raymond Hsu / Unsplash

Pengenalan

Dalam bahasa pemrograman C#, kita sering menemukan konsep Interface dan Abstract Class ketika berbicara tentang desain arsitektur kode. Keduanya digunakan untuk mendefinisikan kontrak atau blueprint bagi kelas yang menggunakannya. Namun, banyak programmer pemula yang masih bingung dengan perbedaan mendasar antara Interface dan Abstract Class.

Singkatnya:

Interface → Mendefinisikan kontrak tanpa implementasi. ✅ Abstract Class → Bisa memiliki kontrak dan sebagian implementasi.

Artikel ini akan menjelaskan secara detail perbedaan antara Interface dan Abstract Class, kapan harus menggunakannya, serta contoh implementasinya dalam C#! 🚀

1. Apa Itu Interface dalam C#?

Interface adalah kerangka kerja yang hanya berisi deklarasi method tanpa implementasi. Interface digunakan untuk menentukan kontrak yang harus diikuti oleh class yang mengimplementasikannya.

Catatan: Semua method dalam interface bersifat abstrak secara default dan harus diimplementasikan oleh class yang menggunakannya.

📌 Contoh Interface

using System;

interface IKendaraan {
    void Maju();
    void Berhenti();
}

class Mobil : IKendaraan {
    public void Maju() {
        Console.WriteLine("Mobil sedang maju.");
    }

    public void Berhenti() {
        Console.WriteLine("Mobil berhenti.");
    }
}

class Program {
    static void Main() {
        IKendaraan kendaraan = new Mobil();
        kendaraan.Maju();
        kendaraan.Berhenti();
    }
}

Output:

Mobil sedang maju.
Mobil berhenti.

Penjelasan:

  • IKendaraan adalah interface yang mendeklarasikan dua method: Maju() dan Berhenti().
  • Class Mobil mengimplementasikan IKendaraan dan memberikan kode untuk method Maju() dan Berhenti().
  • Interface tidak bisa memiliki implementasi method, hanya deklarasi.

2. Apa Itu Abstract Class dalam C#?

Abstract Class adalah kelas yang tidak bisa diinstansiasi secara langsung, tetapi bisa memiliki method yang sudah diimplementasikan dan method yang masih abstrak.

Catatan: Abstract Class bisa memiliki konstanta, variabel, constructor, method dengan implementasi, dan method abstrak.

📌 Contoh Abstract Class

using System;

abstract class Hewan {
    public abstract void Bersuara();

    public void Makan() {
        Console.WriteLine("Hewan sedang makan.");
    }
}

class Kucing : Hewan {
    public override void Bersuara() {
        Console.WriteLine("Meow... Meow...");
    }
}

class Program {
    static void Main() {
        Hewan hewan = new Kucing();
        hewan.Bersuara();
        hewan.Makan();
    }
}

Output:

Meow... Meow...
Hewan sedang makan.

Penjelasan:

  • Class Hewan adalah Abstract Class yang memiliki method abstrak Bersuara() dan method konkret Makan().
  • Class Kucing mewarisi Hewan dan mengimplementasikan method Bersuara().
  • Method Makan() tidak perlu diimplementasikan ulang karena sudah memiliki kode dalam Abstract Class.

3. Perbedaan Utama Interface vs Abstract Class

Perbedaan Interface Abstract Class
Bisa memiliki implementasi method? ❌ Tidak bisa ✅ Bisa
Bisa memiliki variabel? ❌ Tidak bisa (hanya konstanta) ✅ Bisa memiliki variabel instance
Bisa memiliki constructor? ❌ Tidak bisa ✅ Bisa
Bisa mewarisi class lain? ✅ Bisa multiple inheritance (banyak interface) ❌ Hanya bisa single inheritance
Cocok digunakan untuk? Menyediakan kontrak bagi banyak class berbeda Membuat kerangka kerja dengan sebagian implementasi

📌 Contoh Ilustrasi Perbedaan

// Interface hanya bisa mendeklarasikan method tanpa implementasi
interface IMakhlukHidup {
    void Bernapas();
}

// Abstract class bisa memiliki method dengan implementasi
abstract class MakhlukHidup {
    public void Makan() {
        Console.WriteLine("Makhluk hidup makan.");
    }
    public abstract void Bernapas();
}

4. Kapan Menggunakan Interface dan Abstract Class?

Gunakan Interface jika:

  • Ingin membuat kontrak standar untuk class yang berbeda-beda.
  • Perlu multiple inheritance, karena satu class bisa mengimplementasi banyak interface.
  • Tidak butuh variabel instance atau constructor.

Gunakan Abstract Class jika:

  • Ingin membuat kerangka kerja dengan method yang bisa langsung digunakan.
  • Ingin menggunakan konstanta, variabel instance, atau constructor.
  • Hanya perlu satu level pewarisan (karena C# tidak mendukung multiple inheritance pada class).

5. Kesimpulan

  • Interface hanya berisi kontrak method tanpa implementasi, sedangkan Abstract Class bisa memiliki method dengan dan tanpa implementasi.
  • Abstract Class cocok digunakan untuk hierarki objek yang memiliki kesamaan, sedangkan Interface digunakan untuk mengatur struktur umum tanpa hubungan pewarisan.
  • C# tidak mendukung multiple inheritance pada class, tetapi satu class bisa mengimplementasi banyak interface.

Dengan memahami perbedaan Interface dan Abstract Class, kamu bisa memilih pendekatan terbaik dalam desain arsitektur aplikasi C#!

Read more