Daftar Isi
Perbedaan Abstract Class dan Interface
Pendahuluan
Abstract class dan interface adalah dua konsep penting dalam pemrograman berorientasi objek. Keduanya digunakan untuk memodelkan hubungan antara kelas-kelas dan mengimplementasikan polimorfisme. Meskipun serupa dalam beberapa hal, ada beberapa perbedaan penting antara abstract class dan interface. Artikel ini akan menjelaskan perbedaan-perbedaan tersebut dengan detail.
Abstract Class
Abstract class adalah kelas yang tidak dapat diinstansiasi secara langsung. Artinya, tidak mungkin membuat objek dari abstract class tersebut. Abstract class berperan sebagai kerangka dasar untuk kelas-kelas turunannya. Abstract class dapat memiliki metode abstrak dan non-abstrak, serta variabel-variabel. Namun, abstract class tidak dapat diimplementasikan oleh lebih dari satu kelas turunan.
Contoh penggunaan abstract class:
abstract class Bentuk {
protected $warna;
abstract public function hitungLuas();
}
class PersegiPanjang extends Bentuk {
private $panjang;
private $lebar;
public function hitungLuas() {
return $this->panjang * $this->lebar;
}
}
Interface
Interface adalah kontrak yang menggambarkan perilaku kelas-kelas yang mengimplementasikannya. Interface hanya berisi deklarasi metode dan konstan, tanpa implementasi konkret. Kelas yang mengimplementasikan interface harus menyediakan implementasi dari semua metode yang dideklarasikan dalam interface tersebut.
Contoh penggunaan interface:
interface Bentuk {
const PI = 3.14;
public function hitungLuas();
public function hitungKeliling();
}
class Lingkaran implements Bentuk {
private $radius;
public function hitungLuas() {
return self::PI * $this->radius * $this->radius;
}
public function hitungKeliling() {
return 2 * self::PI * $this->radius;
}
}
Perbedaan Utama
1. Instansiasi
Abstract class tidak dapat diinstansiasi secara langsung, sementara interface tidak dapat diinstansiasi sama sekali. Interface hanya berperan sebagai kontrak dan harus diimplementasikan oleh kelas-kelas yang ingin menggunakannya.
2. Implementasi
Kelas dapat mengimplementasikan banyak interface sekaligus, tetapi hanya dapat meng-extend satu abstract class. Dengan menggunakan interface, kita dapat menerapkan polimorfisme secara lebih fleksibel dan menghindari keterbatasan pewarisan dari hanya satu class.
3. Implementasi Metode
Metode dalam abstract class dapat memiliki implementasi konkret, sedangkan metode dalam interface hanya berisi deklarasi tanpa implementasi. Kelas yang mengimplementasikan interface harus memberikan implementasi konkret dari semua metode yang dideklarasikan dalam interface tersebut.
4. Variabel
Abstract class dapat memiliki variabel dengan berbagai tingkatan aksesibilitas (public, protected, private), sementara interface hanya dapat memiliki konstan (constant) yang bersifat public. Variabel dalam abstract class dapat memiliki nilai dan digunakan dalam implementasi metode-metode konkret.
5. Pewarisan
Ketika meng-extend sebuah abstract class, kelas turunannya mewarisi baik metode-metode abstrak maupun non-abstrak dari abstract class tersebut. Namun, ketika mengimplementasikan sebuah interface, kelas tersebut harus menyediakan implementasi dari semua metode yang dideklarasikan dalam interface tersebut.
Kesimpulan
Abstract class dan interface adalah dua konsep penting dalam pemrograman berorientasi objek. Abstract class digunakan untuk memodelkan kerangka dasar kelas-kelas turunannya, sedangkan interface digunakan sebagai kontrak perilaku yang harus diikuti oleh kelas yang mengimplementasikannya. Perbedaan utama antara abstract class dan interface terletak pada instansiasi, implementasi, implementasi metode, variabel, dan pewarisan.
FAQ
1. Apakah abstract class dapat mengimplementasikan interface?
Tidak, abstract class tidak dapat mengimplementasikan interface. Namun, abstract class dapat meng-extend abstract class lainnya.
2. Apakah interface dapat memiliki implementasi konkret?
Tidak, interface hanya berisi deklarasi metode tanpa implementasi konkret. Implementasi metode dilakukan oleh kelas-kelas yang mengimplementasikan interface tersebut.
3. Berapa banyak interface yang dapat diimplementasikan oleh sebuah kelas?
Sebuah kelas dapat mengimplementasikan banyak interface sekaligus. Hal ini memberikan fleksibilitas yang lebih besar dalam menggunakan polimorfisme.
4. Apakah abstract class dapat memiliki variabel?
Ya, abstract class dapat memiliki variabel dengan berbagai tingkatan aksesibilitas (public, protected, private). Variabel dalam abstract class dapat digunakan dalam implementasi metode-metode konkret.
5. Kapan sebaiknya menggunakan abstract class dan kapan sebaiknya menggunakan interface?
Gunakan abstract class ketika Anda ingin memodelkan kerangka dasar kelas-kelas turunannya dan ingin memiliki implementasi konkret dalam abstract class tersebut. Gunakan interface ketika Anda hanya perlu mendefinisikan kontrak perilaku yang harus diikuti oleh kelas-kelas yang mengimplementasikannya.