Sabtu, 02 April 2016

DIFFERENCES BETWEEN ABSTRACT CLASS AND INTERFACE IN JAVA


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_") );
                }
}
OUTPUT

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)!


 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! 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