Kamis, 31 Maret 2016

Perbedaan antara Abstract Class dan Interface

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 bisa karena hanya bisa pada class child tidak bisa pada class parent
2. Error yang terjadi dikarenakan pada method get value ditiadakan sehingga method tersebut merupakan perintah statement dari method kelas parents nya.
3. perbedaanya hanya pada akses setiap class
4. Karena class ConcreteClass1 bukan abstract method dan tidak memiliki overide pade parentnya
5. Maka akan terjadi error pada main program selain itu pada abstract class tidak boleh ada instansiasi
*/

Tidak ada komentar:

Posting Komentar