Kembali ke artikel

14 September 2022

8 menit baca

Abstract Class dan Interface Apa Perbedaannya? (C#)

Membedakan dua konsep yang sama-sama terasa abstrak, tapi punya peran desain yang berbeda.

C#OOPArchitecture
Lihat versi Medium asli
Abstract Class dan Interface Apa Perbedaannya? (C#)

Kebingungan yang sering muncul saat belajar OOP

Ketika mulai mendalami OOP, abstract class dan interface sering terasa mirip karena keduanya sama-sama membantu abstraksi. Keduanya juga sama-sama memberi cara untuk mendefinisikan perilaku pada turunan atau implementasi.

Masalahnya, kalau hanya dilihat dari definisinya, keduanya memang terlihat seperti saudara dekat. Bedanya baru terasa ketika kita mulai mendesain relasi antar kelas di dunia nyata.

Kapan abstract class lebih cocok

Abstract class tepat digunakan saat kita memiliki beberapa turunan yang berbagi struktur dan sebagian logika yang sama. Ia tidak cuma menjadi kontrak, tetapi juga tempat untuk meletakkan implementasi dasar yang memang pantas diwariskan.

Contoh sederhananya adalah kelas `Cinema` yang punya cara umum menghitung total biaya pelanggan. Setiap turunan boleh menghitung admin fee dengan aturan berbeda, tetapi cara menjumlahkan total tetap bisa dibagikan dari kelas induk.

abstract class Cinema
{
    public abstract decimal Price { get; }
    public abstract decimal ParkingFee { get; }
    public abstract decimal CalculateAdminFee();

    public decimal TotalCustomerSpend()
    {
        return Price + ParkingFee + CalculateAdminFee();
    }
}
Catatan

Abstract class berguna saat kita ingin turunan berbagi bentuk sekaligus logika yang sudah pasti sama.

Kapan interface lebih cocok

Interface lebih pas ketika yang ingin kita definisikan hanyalah kemampuan atau kontrak. Ia tidak perlu tahu bagaimana kemampuan itu diimplementasikan, selama kelas yang memakainya memenuhi janji yang diminta.

Karena satu kelas bisa mengimplementasikan banyak interface, pendekatan ini sangat berguna untuk memodelkan perilaku lintas hirarki, misalnya sesuatu yang bisa terbang, bisa di-cache, atau bisa diaudit.

interface IRobot
{
    string Name { get; }
    void CanWalk();
    void CanSpin();
}

interface ICanFly
{
    void Fly();
}
Catatan

Interface menekankan kemampuan yang harus tersedia, bukan implementasi bersama.

Cara memilih tanpa drama

Pertanyaan praktisnya sederhana: apakah saya hanya ingin mendefinisikan kemampuan, atau juga membagikan logika dasar? Jika hanya kontrak, interface biasanya lebih tepat. Jika butuh logika bersama dan relasi turunan yang jelas, abstract class lebih masuk akal.

Dengan sudut pandang ini, keputusan desain jadi terasa lebih tenang. Kita tidak lagi memilih berdasarkan istilah, tetapi berdasarkan kebutuhan model di domain aplikasi.

Simpulan

Abstract class dan interface sama-sama membantu menyembunyikan kerumitan, tetapi caranya berbeda. Abstract class memberi tempat untuk berbagi perilaku, sedangkan interface memberi kontrak atas kemampuan.

Kalau desainmu terasa buntu, coba cek lagi apakah yang dibutuhkan adalah pewarisan logika atau sekadar definisi kemampuan. Biasanya jawabannya langsung mengarah ke salah satu.

Daftar isi

  • Kebingungan yang sering muncul saat belajar OOP
  • Kapan abstract class lebih cocok
  • Kapan interface lebih cocok
  • Cara memilih tanpa drama
  • Simpulan

Artikel terkait

Dibuat pelan-pelan dengan rasa hangat dari Kuningan.

© 2026 Rifky Haekal Al-Fadillah