Tuesday, April 23, 2013

Perbedaan Abstract Class dan Interface pada Java

Abstract class adalah kelas yang terletak pada posisi tertinggi pada hierarki kelas. Kelas ini digunakan sebagai basis bagi penurunan kelas lainnya, sehingga abstract class tidak dapat diinstansiasi secara langsung menjadi object. Suatu abstract class bisa mengandung method kongkrit dan/atau method abstract. Abstract method meruapakan suatu method yang tidak mempunyai badan method. Hanya berupa nama method dan parameter inputan method. Ketika suatu abstract class diturunkan/ di-extends, maka subclass harus mengimplementasikan semua method abstract pada parent/ base class. Jika tidak mengimplementasikan semua method abstract maka subclass harus dideklarasikan sebagai abstract class.
Interface adalah kumpulan method yang hanya memuat deklarasi dan struktur method, tanpa detail implementasinya. Sedangkan detail dari method berada pada class yang mengimplementasikan interface tersebut. Interface digunakan bila Anda ingin mengaplikasikan suatu method yang spesifik, yang tidak diperoleh dari proses inheritance. Tipe data yang boleh pada interface hanya tipe data konstan. Setelah mengetahui apa itu interface. Timbul pertanyaan Mengapa membutuhkan interface?
  • Memecahkan bagian yang rumit dan spesifik. Dengan menggunakan class atau interface oleh vendor maka dalam pembuatan perangkat lunak menjadi lebih cepat.
  • Keterbatasan inheritance pada Java. Interface menjawab kebutuhan untuk melakukan multiple inheritance

Kelas Abstract

Suatu kelas dapat  diinstansiasi menjadi obyek. Misalnya kelas Segiempat dapat diinstansiasi menjadi Keliling dan Luas. Namun tidak semua kelas dapat diinstansiasikan, contohnya kelas MahlukHidup karena kelas ini
terlalu umum(abstract). Ok saya akan perjelas mengenai  kelas abstract ini. Jika kita ingin menginstansiasikan sebuah obyek, misalnya saja Bergerak dan Melihat. Sedangkan pada kenyataannya tidak semua mahluk hidup melihat dan bergerak, karena tumbuhan juga termaksud maklup hidup. Kelas seperti inilah yang disebut kelas abstract. Untuk menginstansiasikanya, maka kita membutuhkan kelas turunan, agar dapat membuatnya menjadi lebih spesifik. Dan yang pasti kelas turunan tersebut haruslah hingga menjadi sebuah kelas yang lebih nyata.

Jika dianalogikan maka akan seperti berikut ini : Jika kelas MahlukHidup mempunyai method Bernapas, maka tidak dapat ditentukan apakah mahlup hidup tersebut bernapas dengan paru-paru, insang, atau stomata. Jadi kita membutuhkan kelas turunan yang lebih abstract untuk mengintansiasikanya.

Interface

Interface merupakan kelas yang paling abstract, hanya berisi daftar deklarasi method, artinya semua method belum mempunyai implementasi.  Sebagai analoginya akan saya gambarkan sebagai berikut.  Dalam kehidupan nyata, terdapat manusia yang bekerja sebagai guru, petani, sapam, pedagang dan lain-lain. Misalkan saja Terdapat kelas Pak Dony, maka kelas ini akan diturunkan dari kelas manusia, namun harus mengimplementasikan sebuah kelas lagi (yang haruslah merupakan sebuah interface sebab java hanya mendukung sebuah induk kelas untuk setiap kelas). Jadi kelas PakDony merupakan implemen dari kelas Guru (jika dia merupakan seorang guru).

Syarat sebuah interface :

1. Tidak memiliki atribute (hanya memiliki konstanta)
2. Tidak memiliki obyek (tidak ada instansiasi)
3. Tidak memiliki modifier static
4. Tidak extends dari kelas lain namun boleh extends dari interface lain bahkan boleh extends ke lebih dari
    satu interface lain.
5. Tidak implemen dari kelas lain.


Contoh
GraphicObject.java
abstract class GraphicObject {
int x,y;
void moveTo(int newValueX, int newValueY)
{
x = newValueX;
y = newValueY;
}
abstract void drawShape();
abstract void resize();
}
Circle.java
public class Circle extends GraphicObject {
void resize()
{
System.out.println(“Circle Resize”);
}
void drawShape()
{
System.out.println(“Circle Shape”);
}
void posisition()
{
System.out.println(this.x+this.y);
}
}
Main.java
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Circle Lingkaran = new Circle();
Lingkaran.moveTo(5,5);
Lingkaran.drawShape();
Lingkaran.resize();
Lingkaran.posisition();
}
}


No comments:

Post a Comment

Kebahagiaan sejati bukanlah pada saat kita berhasil meraih apa yg kita perjuangkan, melainkan bagaimana kesuksesan kita itu memberi arti atau membahagiakan orang lain.