Jumat, 01 April 2016

Perbedaan Abstract Class dan Interface (Java)

Abstract Class adalah sebuah class pada posisi hierarki tertinggi karena harus diimplementasikan pada sub classnya. Kelas abstrak adalah kelas yang belum jelas spesifikasinya, kelas ini memiliki abstract method yang harus diimplementasikan ulang (override) pada subclassnya. Namun, dalam kelas ini bisa saja terdapat concrete method. Abstract method adalah method kosong atau belum diimplementasikan. Abstract class tidak dapat di instansiasi. Keyword yang biasanya digunakan adalah extends, yaitu untuk memanggil fungsi dari kelas lain karena abstract method dalam abstract class harus di override.

Interface adalah sebuah class yang hanya memiliki method kosong, method yang tidak ada implementasinya dan semua property yang dimiliki bersifat final. Dalam kelas interface, semuanya adalah abstract method dan tidak bisa dimasukkan concrete method. Ini adalah salah satu hal yang membedakan antara abstract class dan interface class. Tipe data yang digunakan dalam interface adalah tipe konstanta. Semua variabel dalam interface secara otomatis adalah static final. Interface dapat diturunkan pada class yang ingin menggunakan denagn keyword extends. Dan mengimplementasi class interface yang lain denagn keyword implements. Interface memungkinkan multiple inheritance (pewarisan jamak) pada java.


Beberapa perbedaan yang menonjol antara abstract class dengan interface class yaitu, isi dari interface class hanya abstract method sedangkan dalam abstract class dapat berisi abstract method maupun concrete method. Interface hanya memiliki tipe data berupa konstanta, sedangkan abstract class dapat memiliki semua tipe data. Namun, terdapat persamaan pada kedua class ini yaitu, sama-sama tidak memungkinkan untuk dibuat objeknya. Untuk membuktikannya, mari lihat penjelasan di bawah~~ :D

Contoh kode abstract class :

Contoh Abstract Class


Hasil Running Abstract Class


Hasil Pengamatan :
1.        Bolehkah ditambahkan body "{statement1; statement1;}" pada method getValue ataupun method prefixValue pada class abstract AbstractClass? Jelaskan!
Ø  Pada method getvalue dan prefixValue pada Abstarct class tidak dapat ditambahkan body “{statement 1; statement 2;}” karena kedua method tersebut adalah abstract method yang tidak bisa diimplemetasikan secara langsung,
2.     Kembalikan program seperti semula, jelaskan error apa yang terjadi apabila method getValue() pada class ConcreteClass1 di hapus!
Ø  Jika method getValue pada ConcreteClass1 dihapus, maka akan terjadi error “ConcreteClass1 is not abstract and does not override abstract method getValue() in AbstractClass”. 


    Pada Abstract class, getValue() merupakan abstract method sehingga harus di override/ di implementasikan pada kelas turunannya.

3.  Kembalikan program seperti semula, selanjutnya perhatikan perbedaan hak akses method getValue() di child class ConcreteClass1 dan ConcreteClass2! Jelaskan apa maksudnya!
Ø    Hak akses “protected” pada ConcreteClass1 adalah hak akses yang hanya dapat digunakan oleh class itu sendiri dan class turunannya. Hak akses lainnya adalah private dan public. Private adalah hak akses hanya untuk kelas itu sendiri, sedangakan public dapat digunakan pada semua class dan package manapun.

4.  Buatlah abstract method yang bernama getValue2 pada class ConcreteClass1! Compile dan mengapa terjadi error?
Ø    Jika kita menambahkan method abstract pada kelas turunan, seperti pada ConcreteClass1, maka akan terjadi error. Muncul perran error karena abstract method tidak dapat di deklarasikan pada kelas konkret. Abstract method hanya dapat dideklarasikan pada abstract class atau interface. Namun, dalam abstract class dapat diisi dengan concrete method.
Error ketika ditambahkan method getValue2


5.   Ikuti soal nomor 4, silahkan ubah class ConcreteClass1 menjadi abstract. Selajutnya jelaskan mengapa terjadi error?
Ø     Jika ConcreteClass1 diubah menjadi abstract class, eror akan terjadi pada class Main. Kelas abstract tidak akan bisa dibuat objeknya.

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    

Coding 1 Soal no. 6

Coding 2 Soal no. 6


Hasil Running Soal no. 6

 

Contoh Interface :




Contoh Interface


Hasil Pengamatan:
1.        Compile kode program diatas dan jelaskan sebab error yang terjadi!
Ketika kode siatas di compile, muncul pesan error “Mobil2 is not Abstract and does not override abstract method getMerk() in Mobil”. 

Pesan error yang muncul

Eror terjadi karena pada class mobil2 tidak terdapat abstract method yang diimplementasikan.

2.        Tambahkan method yang diperlukan untuk mengatasi error yang terjadi (No. 1)!
Untuk mengatasinya, cukup tambahkan method seperti pada class Mobil1, jadi isinya sama seperti mobil1.


3.        Perhatikan soal 1 (abstract) dan soal 2 ini (interface) dan lakukan poin-poin berikut:
ö  Apa yang terjadi apabila ditambahkan method biasa yang mengandung body "{}" pada interface Mobil? Jelaskan!
Jika ditambahkan method biasa pada class interface Mobil, akan terjadi eror. Karena isi dari Interface harus abstract method atau method kosong.

ö     Jelaskan perbedaan body program antara class abstract dan interface!
Pada body program abstract class, terdapat keyword “abstract” untuk membuat abstract method dan keyword “Abstract” sebelum identifier nama class. Sedangakan pada Interface hanya menggunakan keyword “Interface” sebelum identifier nama classnya, selanjutnya menulis method seperti biasa tetapi berupa method kosong.

ö     Jelaskan perbedaan penggunaan extends antara soal 1 dan soal 2!

Extends pada Abstract class (soal 1) digunakan unutk meng-override abstract method pada superclassnya. Sedangkan, extends pada Interface (Soal 2) untuk menambahkan abstract method yang dibutuhkan.


Referensi :



1 komentar:

  1. Hard Rock Hotel and Casino New Orleans - MapyRO
    The Hard Rock Hotel 거제 출장마사지 and Casino New Orleans is one 오산 출장샵 of the newest additions to the iconic 보령 출장샵 Hard Rock Hotel 천안 출장샵 and Casino. It's a short walk from 안산 출장마사지 the

    BalasHapus