Thursday, 31 March 2016

Sebelum kita masuk ke pembahasan, kalian tahu nggak abstract class sama interface itu apa?
Nah mari kita lihat di bawah ...
Pengertian Abstract dalam java

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 dapat digunakan untuk mendefinisikan method yang nantinya akan diimplementasi di Derived Class (kelas turunan / inherit dari Abstract Class ).

2.       Pengertian 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.

3.       Penjelasan Tentang Abstract Dan interface :
·         Beberapa perbedaan Interface dan Kelas Abstrak yaitu :
Abstract class dapat memiliki tipe data dengan semua tipe data, sedangkan interface tipe datanya hanya berupa konstanta Method pada abstract class dapat berupa method kongkrit dan method abstract. Sedangkan pada interface semua method harus berupa method abstract.
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 abstact class hanya bisa meng-extend satu abstract class lainnya.
Suatu interface hanya bisa meng-extend interface lainnya.  Dan tidak bisa meng-implement class atau interface lainnya.

Berikut source tentang abstrak sama interface nya
abstract class AbstractClass
{
    // Force Extending class to define this method
    abstract protected String getValue();
    abstract protected String prefixValue(String prefix);
    abstract protected String gabung();
    // Common method
    public void printOut() {
        System.out.println( this.getValue() );
    }
}

/*abstract*/ class ConcreteClass1 extends AbstractClass

{
protected String getValue() {
        return "ConcreteClass1";
    }
    
     protected String gabung(){
 return this.getValue();
 }
     //abstract protected String getValue2();
 
    public String prefixValue(String prefix) {
return prefix + "ConcreteClass1";
    }
}

class ConcreteClass2 extends AbstractClass

{
    public String getValue() {
        return "ConcreteClass2";
    }
     public String gabung() {
 return this.getValue();
 }
    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("Mr. Tatank hobi meloncat") );

ConcreteClass2 class2 = new ConcreteClass2();
class2.printOut();
System.out.println( class2.prefixValue("Mrs. Kells hobi melet") );
}
}
/* 
Pengamatan:
1. Bolehkah ditambahkan body "{statement1; statement1;}" pada method getValue ataupun method prefixValue pada class abstract AbstractClass? Jelaskan!
2. Kembalikan program seperti semula, jelaskan error apa yang terjadi apabila method getValue() pada class ConcreteClass1 di hapus!
3. Kembalikan program seperti semula, selanjutnya perhatikan perbedaan hak akses method getValue() di child class ConcreteClass1 dan ConcreteClass2! Jelaskan apa maksudnya!
4. Buatlah abstract method yang bernama getValue2 pada class ConcreteClass1! Compile dan mengapa terjadi error?
5. Ikuti soal nomor 4, silahkan ubah class ConcreteClass1 menjadi abstract. Selajutnya jelaskan mengapa terjadi error? 
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

jawaban:

1. Tidak boleh karna kalau abstract method itu statement nya tidak disertakan pada abstract method pada parents nya tapi pada method anaknya.
2. Error disana merupakan error yag terjadi karna si method get value nya ditiadakan soalnya si method itu merupakan perinta statement dari method get value dari kelas parents nya.
3. Jadi perbedaan nya adalah hanya di hak akses aja dari setiap class nya.
4. Karna class ConcreteClass1 bukan abstract method dan juga nggak ada ovriide nya di class parents nya.
5. Karna kalau class ConcreteClass1 diubah menjadi abstract class error nya di main program nya, kan kalau abstract class gaboleh ada pembuatan objrct atau peninstansiasian.
*/

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;
private String merk;

    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;
    }


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. Compile kode program diatas dan jelaskan sebab error yang terjadi!
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!
- Jelaskan perbedaan body program antara class abstract dan interface! 
- Jelaskan perbedaan penggunaan extends antara soal 1 dan soal 2!

jawaban:

1. Class Mobil2 bukan class abstract dan juga tidak ada Override method getMerk() di class Mobil2.
2. Diatas di program ngerjainnya ^
3. a. program nya akan error karna di class interface tidak diperbolehkan memakai metheod bias, harus method abstract saja.
   b. kalau body program abstract itu dalam penurunan sifat nya memakai extends kalau di interface classs memakai implements  
   c. Kalau di soal no1 penggunaan extends nya itu menunjukan bahwa si abstract class itu memiliki child. tapi kalau di soal no 2 si extends nya menunjukan bahwa si interface nya yg memiliki child.
*/ 

0 comments:

visitor

Flag Counter

Popular Posts