PERBEDAAN ABSTRACT DAN INTERFACE PADA JAVA
1. ABSTRACT
Abstract
Class merupakan kelas murni (tanpa objek) dan tidak boleh memiliki objek
(tidak boleh ada instansiasi) serta method-method yang abstract harus
disempurna-kanoleh kelas turunannya melalui override. Tujuan dari
pembuatan abstract class ini ialah untuk membuat definisi umum bagi class-class
yang akan menjadi turunan darinya. Abstract Class dapat digunakan untuk
mendefinisikan method yang nantinya akan diimplementasi di Derived Class (kelas
turunan / inherit dari Abstract Class ).
2. INTERFACE
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 jika ingin
mengaplikasikan suatu method yang spesifik, yang tidak diperoleh dari proses
inheritance. Tipe data yang boleh
pada interface hanya tipe data konstan.
Perbedaan Komponen penyusun Abstract
Class dan Interface yaitu :
No
|
Komponen
|
Abstract
Class
|
Interface
|
1.
|
Tipe data/variabel
|
Semua tipe data
|
Hanya boleh berupa konstanta
|
2.
|
Method
|
Bisa berupa signature-nya saja atau berupa detail
implementasi method
|
-
Hanya berupa signature
-
Programmer harus mendefinisikan dan membuat detail
implementasi dari method. Jadi, method yg terdapat didalamnya yaitu method
abstract
|
3.
|
Sintaks Method
|
Semua method yang di deklarasikan di dalam abstract
class harus dibubuhi modifier abstract
|
Tidak pelru membubuhkan modifier abstract pada semua
method di dalam kelas
|
PERBEDAAN SECARA UMUM
ABSTRACT CLASS DAN INTERFACE CLASS
Abstract Class
|
Interface Class
|
Bisa
berisi abstract dan non abstract method
|
Hanya boleh berisi abstract
method
|
Bisa mendeklarasikan constant dan instance
|
Hanya bisa
mendeklarasikan constrant
|
Method
boleh bersifat static dan final
|
Method tidak boleh bersifat
static dan final
|
Suatu abstract class hanya bisa meng-extend satu abstract class lainnya
|
Suatu interface
hanya bisa meng-extends interface lainnya. dan tidakk bisa meng-implement
class atau interface lainnya
|
Dan saya akan menjelaskan tentang program abstract class
berdasarkan pengamatan yang telah saya lakukan.
Berikut hasil pengamatan Abstract
Class :
PROGRAM ABSTRACT
CLASS
abstract class AbstractClass
{
// Force Extending class to define this
method
abstract protected String getValue();
abstract protected String
prefixValue(String prefix);
// Common method
public void printOut() {
System.out.println( this.getValue() );
}
}
class ConcreteClass1 extends
AbstractClass
{
protected
String getValue() {
return "ConcreteClass1";
}
public String prefixValue(String prefix) {
return
prefix + "ConcreteClass1";
}
}
class ConcreteClass2 extends
AbstractClass
{
public String getValue() {
return "ConcreteClass2";
}
public String prefixValue(String prefix) {
return
prefix + "ConcreteClass2";
}
}
class Main
{
public
static void main(String args[]) {
ConcreteClass1
class1 = new ConcreteClass1();
class1.printOut();
System.out.println(
class1.prefixValue("FOO_") );
ConcreteClass2
class2 = new ConcreteClass2();
class2.printOut();
System.out.println(
class2.prefixValue("FOO_") );
}
}
PENGAMATAN ABSTRACT CLASS
1 1.
Bolehkah ditambahkan body "{statement1;
statement1;}" pada method getValue ataupun method prefixalue pada class
abstract AbstractClass? Jelaskan!
Tidak, karena
dalam abstract class didefinisikan sebagai class yang tidak memiliki objek.
Terlebih lagi didalam abstract class tidak memiliki body method , apabila
method tersebut diisikan code akan terjadi eror. Sehingga, pada class childnya
kita mengoverride method tersebut.
2. Kembalikan program seperti semula, jelaskan
error apa yang terjadi apabila method getValue() pada class ConcreteClass1 di
hapus!
Karena pada
Abstract Class terdapat method getValue ( ), dan pada ConcreteClass1 telah
mengextends dari AbstractClass, jadi ConcreteClass1 mengoveride method abstrak
yang ada di abstrak class, jika salah satunya ada di hapus maka terjadi eror.
1. 3 . Kembalikan program seperti semula, selanjutnya
perhatikan perbedaan hak akses method getValue() di child class ConcreteClass1
dan ConcreteClass2! Jelaskan apa maksudnya!
Dalam ConcreteClass1 memiliki hak akses protected,
protected yaitu hak aksesnya pada satu kelas itu sendiri, kelas turunan tidak
dapat mengakses method tersebut. Sedangkan ConcreteClass2 memiliki hak akses
public, public artinya akses dapat dilakukan pada kelas yang lainnya.
1. 4. Buatlah abstract method yang bernama getValue2
pada class ConcreteClass1! Compile dan mengapa terjadi error?
Karena
ConcreteClass1 bukan kelas abstrak, melainkan subclass dari Abstract Class yang
sudah ada. Sehingga tidak dapat diberi abstract method.
5. Ikuti soal nomor 4, silahkan ubah class ConcreteClass1
menjadi abstract. Selajutnya jelaskan mengapa terjadi error?
Karena, dapat dilihat dari
eror tersebut jika diganti dengan method abstract akan menjadikan suatu objek,
sedangkan sifat dari abstract itu tidak dapat membuat objek.
6. Dengan
mengikuti struktur kode program di atas serta ditambahkan satu abstract method
bernama "gabung" TANPA PARAMETER pada parent class, hasilkan output
berikut:
Tatank
Mr. Tatank
Mr. Tatank hobi meloncat
Kells
Mrs. Kells
Mrs. Kells hobi melet
PENGAMATAN INTERFACE
1. Compile kode program diatas dan jelaskan sebab error yang terjadi!
Pada class Mobil2 tidak melakukan override method merk yang terdapat di interface mobil
2. Tambahkan method yang diperlukan untuk mengatasi error yang terjadi (No. 1)!
- Apa yang terjadi apabila ditambahkan method biasa yang mengandung body "{}" pada interface Mobil? Jelaskan! Terjadi eror, karena dalam aturan interface semua method adalah abstract dan juga public. Apabila method tersebut bersifat abstract, maka tidak bisa diberikan body pada method tersebut,
- Jelaskan perbedaan body program antara class abstract dan interface!
Pada Abstract Class memiliki atribut didalamnya, sedangkan interface tidak memiliki atribut.
- Jelaskan perbedaan penggunaan extends antara soal 1 dan soal 2!
Pada soal no 1 extends digunakan untuk mengoveride suatu abstract method, sedangkan pada no 2 extends digunakan untuk menambahkan abstract method.













0 komentar:
Posting Komentar