Abstract Class dan Interface Apa Perbedaannya? (C#)
14 September 2022
•
8 menit baca
•
4 pembaca

Membedakan dua konsep yang sama-sama terasa abstrak, tapi punya peran desain yang berbeda.
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.
C#
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.
C#
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.
Baca juga
Artikel lain
6 Juni 2026
•
10 menit baca
Catatan Pengantar Filsafat 5: Filsafat, Sains, dan Ideologi (Prof. Bambang Sugiharto)
Artikel ini merupakan catatan dan refleksi dari Kuliah Pengantar Filsafat seri kelima bersama Prof. Bambang Sugiharto.
Artikel lain

3 Agustus 2026
•
13 menit baca
Catatan Estetika 5: Kebenaran dalam Seni (Prof. Bambang Sugiharto)
Artikel ini membahas bagaimana seni pada akhirnya tidak berurusan dengan keindahan, melainkan dengan kebenaran eksistensial, dan bagaimana perjalanan seni dari realisme hingga konseptualisme menjadi jalan menyingkap realitas manusia yang tersembunyi.