Friday, 1 April 2016

Perbedaan antara Abstract Class dan Interface

ABSTRACT CLASS

Abstract Class merupakan Class yang khusus dibuat untuk keperluan inheritance. Tujuan dari pembuatan abstract class ini ialah untuk membuat definisi umum bagi class-class yang akan menjadi turunan darinya.

Abstract Class tidak bisa diinstansiasi. Abstract method tidak mempunyai implementasi, sehingga penulisannya dilakukan hanya dengan mengikutkan semikolon, bukan blok method {} seperti biasanya. Abstract method ini bisa digunakan oleh Class turunannya dengan melakukan override.
Abstract class hanya bisa digunakan sebagai super class, tapi juga bisa diturunkan dari class abstract lainnya. Untuk mendeklarasikan sebuah abstract class digunakan keyword abstract, [abstract] class [class_name] Sebuah abstract class pada dasarnya tidak hauh beda dengan class lainnya, yakni juga berisi method yang menggambarkan carakteristik dari kelas abstract tersebut, bedanya yakni sebuah abstract class bisa berisi method tanpa diimplementasikan artinya sebuah method tanpa body, methid seperti ini disebut method abstract.

INTERFACE

Interface adalah wadah dari kumpulan method yang bersifat abstrak atau tidak memiliki implementasi. Sedangkan method yang didefinisikan di dalam interface tersebut akan diimplementasikan oleh class yang mengimplementasikan interface tersebut. Interface merupakan bentuk perluasan dari kelas abstrak.
Selain method, interface juga dapat berisi sekumpulan variable, namun variable yang dideklarasikan di dalam interface harus bersifat final(nilainya tidak dapat diubah /konstan).
Sebagai contoh : Dalam kehidupan nyata dapat diketahui ada manusia yang bekerja sebagai tentara, penyanyi, pengacara, dan sebagainya, tentunya manusia-manusia tersebut selain harus memiliki method standard sebagai seorang manusia, juga harus memiliki method yang sesuai dengan pekerjaannya. Dengan demikian untuk membuat objek manusia yang bekerja sebagai penyanyi, harus dibuat kelas yang merupakan turunan kelas manusia yang meng-implementasikan interface penyanyi.


Yuk mari kita bahas untuk lebih jelasnya dengan Codingan ...

Abstract Class






Dan jika di Jalankan akan tampil seperti di bawah ini 


Pengamatan :

                       1.Bolehkah ditambahkan body "{statement1; statement1;}" pada method getValue ataupun method prefixValue pada class abstract AbstractClass?



                              Jawab; Tidak boleh, karena kelas abstrak itu tidak boleh di tambahkan objek, karena kelas abstrak harus tanpa statement di bagian kelas induk .


                         2.Error apa yang terjadi apabila method getValue() pada class ConcreteClass1 di hapus?

Jawab : Terjadi error seperti diatas karena pada class ConcreteClass1 meng-extends kelas induk Abstract Class tidak meng-override method getValue() .





3.perbedaan hak akses method getValue() di child class ConcreteClass1 dan ConcreteClass2

Jawab : Perbedaan tersebut kita bisa lihat seperti protected dan public ,  Pada ConcreteClass1 itu terdapat hak akses yang bernama protected yang artinya hanya bisa di akses di class itu sendiri, dan pada  ConcreteClass2 juga terdapat hak akses yang bernama public yang berarti dapat diakses di object/class lain.

4. Buatlah abstract method yang bernama getValue2 pada class ConcreteClass1! Compile dan mengapa terjadi error?



Jawab : Tidak bisa , karena jika ingin membuat abstarct method harus pada klas induk atau di AbstractClass.

5.Mengubah class ConcreteClass1 menjadi abstract. mengapa terjadi error?

Jawab : Karena class ConcreteClass1 bersifat abstract class yang tidak bisa ditambahkan object maupun method atau tidak boleh di buat 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






Program ini adalah contoh lain dri abstract class pengamatan tadi 


INTERFACE

CONTOH SOURCE CODE

 interface Mobil
{
public void setMerk(String merk);
public String getMerk();
}
interface Mesin extends Mobil
{
public void setNoMesin(String nomor_mesin);
public String getNoMesin();
}
// This will work
class Mobil1 implements Mesin
{
private String merk, nomor_mesin;
public void setMerk(String merk){
this.merk = merk;
}
public String getMerk(){
return merk;
}
public void setNoMesin(String nomor_mesin){
this.nomor_mesin = nomor_mesin;
}
public String getNoMesin(){
return nomor_mesin;
}
}
// This will not work and result in a fatal error
class Mobil2 implements Mesin
{
private String nomor_mesin;
public void setNoMesin(String nomor_mesin){
this.nomor_mesin = nomor_mesin;
}
public String getNoMesin(){
return nomor_mesin;
}
}

class Main{
public static void main(String[] args){
Mobil1 m1 = new Mobil1();
m1.setMerk(“Ford”);
m1.setNoMesin(“01010”);
System.out.println( m1.getMerk() );
System.out.println( m1.getNoMesin() );
}
}


Pengamatan

1.Penyebab error pada Source Code di atas 
Jawab : Error karena pada interface mobil terdapat method abstract yang tidak bisa dimasuki  body dan method getMerek dan setMerek tidak di override di class tersebut, karena syaratnya harus di override.

2.Tambahkan method yang diperlukan untuk mengatasi error yang terjadi (No. 1)!
Jawab : Tidak akan error, karena sudah ada fungsi set get pada method merk,Interface dapat berisi method atau object

3.Perhatikan soal 1 (abstract) dan soal 2 ini (interface) dan lakukan poin-poin berikut:
1.Apa yang terjadi apabila ditambahkan method biasa yang mengandung body "{}" pada interface Mobil? Jelaskan!
2.Jelaskan perbedaan body program antara class abstract dan interface! 
3.Jelaskan perbedaan penggunaan extends antara soal 1 dan soal 2!

Jawab : 
1.Tidak bisa karena class interface hanya bisa mempunya method abstract dan method abstract tidak.
2.Pada class abstract bisa berisi method abstract dan non abstract sedangkan interface hanya dapat membuat abstract method saja.
3.Extends di abstract hanya bisa meng-extends antara class abstract lainnya, Suatu interface hanya bisa meng-extend interface lainnya.

0 comments:

Post a Comment