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 ^^
nice blog bro, makasih kunjungannya.....samal kenal dari review1st
ReplyDelete@review1st thanks :)
ReplyDeletepadahal uda gw tulis di blog ini, tapi lagi-lagi lupa dengan perbedaan interface dan abstract class karena kelamaan gak coding >_<
Mantab mas pesan singkat nya,.
ReplyDeletejadi mudeng neh when should be using abstract or interface,.
pesan es jeruk juga mas :hammer
nice post.. :D
ReplyDeletebagus nih artikelnya, cukup membantu..
ReplyDeleteskalian mau tanya.
double aLen = ((Line)a).getLength();
itu maksudnya gimana ya?
thx Diaz untuk komentarnya. Dan maap baru mereply sangat lama.
ReplyDeleteUntuk code "Line" disana, menunjukkan fungsi cast (konversi) ke object Line, karena parameter yang di passing merupakan sebuah "Object".
Karena kebetulan code yang saya ambil ini dari contoh soal di text book, maka saya tidak mencantumkan attributes dari object yang ada.
Semoga penjelasannya membantu dan mohon maaf kalo ada salah.
Bisa buat contoh masalah yang harus memakai interface?
ReplyDeleteHelp....
mantap mas..terima kasih sharing ilmunya
ReplyDeleteAduuuhh... hihi... kalo secara teori rasanya ngerti tapi kenapa pas implementasinya susah banget ya... :D
ReplyDeletePusing nih java, tapi bikin penasaran...haha...
Lanjutkan mas blog, eh mas Yosep Gustri....
cara panggil abstract class di main programnya gmn ya ?
ReplyDeletekalau panggil constructor kan begini, contoh :
Mobil m1 = new Mobil ("Kijang", "Hitam");
tku penjelasnnya gan.. semoga bermanfaat
ReplyDeleteSalam,
Hartoto
http://www.xbasicpro.com
kerenn.. this article had open my mind
ReplyDeleteThanks for sharing
Cara panggil abstract class dari subclass adalah menggunakan keyword 'super', CMIIW
ReplyDelete