It is just a theory. Practical is more important in programming.
Yap, sekedar membahas konsep dan teorinya, karena menurut saya ini penting. Tanpa teori tidak ada percobaan/praktek, begitu juga sebaliknya, tanpa praktek/percobaan nyata maka teori sama sekali tidak berguna!
Mungkin beberapa tau tentang perbedaan ini, yang jadi pertanyaan, kapan kita harus menggunakan interface?dan kapan kita harus menggunakan abstract class? Semoga pertanyaan ini telah terjawab ketika anda membaca artikel dibawah ini. Jika sudah tau, ya tidak perlu dibaca ^_^
Yang perlu diingat "Interface is not a class or an abstract class." It's totally different!"
Abstract class adalah sebuah class setengah jadi (abstrak) yang memuat/memiliki method dan atrribut.
Abstract class sebenarnya adalah sebuah class, sehingga memiliki semua sifat dari class biasa (punya konstruktor). Hanya saja sifatnya masih abstrak, karena itu biasanya method kosong/belum di implementasikan.
Namun Abstract class dapat mengimplementasikan method tersebut.
Abstract class akan selalu menjadi superclass / hirarki tertinggi dari subclass-subclass-nya.
Sedangkan interface:
- Adalah sebuah blok signature kumpulan method tanpa tubuh (konstan).
- Sebuah definisi method yang umum/general yang dapat menghubungkan class-class yang berbeda.
Dengan kata lain, interface memungkinkan kita mengimplementasikan method yang sama terhadap class yang tidak ada hubungan sama sekali (tidak dalam satu hirarki)
- Oleh karena itu interface bukanlah sebuah class, walaupun memiliki ciri yang serupa dengan abstract class.
Sebuah analogi yang bagus menurut saya adalah seperti ini:
- Abstract class adalah mobil, kapal, pesawat
class nya adalah Sedan, SUV, MPV, Sports, dll (untuk mobil)
- Interface adalah Kendaraan darat, kendaraan laut, kendaraan udara.
interface ini memiliki method-method/fungsi-fungsi umum ketiga jenis kendaraan tersebut, yang masing-masing fungsinya harus didefinisikan di class-class yang spesifik.
Kayanya kurang afdol kalo tanpa disertai contoh code nya, berikut saya ambil contoh dalam bahasa JAVA.
Contoh Interface:
public interface RelationContoh Interface yang di implements oleh class:
{
public boolean isGreater( Object a, Object b);
public boolean isLess( Object a, Object b);
public boolean isEqual( Object a, Object b);
}
public class Line implements RelationContoh abstract class:
{
public Line() {
// constructor
}
public boolean isGreater( Object a, Object b){ // method di override dari interface
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen > bLen);
}
public boolean isLess( Object a, Object b){ // method di override dari interface
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen < bLen);
}
public boolean isEqual( Object a, Object b){ // method di override dari interface
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen == bLen);
}
}
public abstract class LivingThing
{
public void breath(){
System.out.println("Living Thing breathing...");
}
public void eat(){
System.out.println("Living Thing eating...");
}
/**
* abstract method walk
* Kita ingin method ini di-overridden oleh subclasses
*/
public abstract void walk();
}
Contoh abstract class yang di inherit:
public class Human extends LivingThingDidalam Java, C#, Object Pascal / Delphi, Smalltalk, dan PHP tidak memperbolehkan multiple inheritance (penurunan class dari superclass yang jumlahnya lebih dari 1). Semata-mata dihilangkan featurenya untuk menghindari ambigu. (Pada C++, Perl, Python, Lisp mensupport multiple inheritance). Walaupun begitu, semuanya kecuali Smalltalk memperbolehkan class untuk mengimplemen banyak interfaces (multiple interfaces).
{
public void walk() {
System.out.println("Human walks...");
}
}
Pesan singkat:
Gunakan interface untuk mendefinisikan method standar yang sama dalam class-class yang berbeda. Sekali kita telah membuat kumpulan definisi method standar(abstrak), kita dapat menulis method tunggal(spesifik) untuk memanipulasi semua class-class yang mengimplementasikan interface tsb.
Gunakan class abstract untuk mendefinisikan secara luas sifat-sifat dari class tertinggi pada hirarki OOP, dan gunakan subclassnya (turunannya/child class) untuk melengkapi deskripsi method dari class abstract.
Maaf kalo ada salah, hanya mau sharing aja, kalo salah dikoreksi ya ^^