Soal:
1. Jelaskan apa itu abstract class dan interface!
2. Jelaskan menurut Anda apa saja perbedaan yang paling menonjol antara abstract class dan interface!
3. Jelaskan keyword-keyword berikut:
a. abstract method
b. extends
c. implements
d. override
e. public
f. protected
g. private
h. parent class
i. child class
j. this
Jawaban
1. 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, sedangkan interface secara filosofis lebih berfungsi sebagai antarmuka yang membentuk komunikasi dengan kode lain.
2. Perbedaan abstract class dan interface
a. Interface :
- hanya bisa mendefinisikan method, tidak dapat mengimplementasikannya.
- Method tidak dapat bersifat static dan tidak boleh bersifat final.
- Suatu interface bisa mengekstends satu atau lebih interface lainnya.
- Suatu interface hanya bisa mengekstends interface lainnya dan tidak bisa mengimplement class atau interface lainnya.
b. Abstract class :
- Dapat mengimplementasikan method.
- Boleh bersifat static dan final.
- Suatu abstact class hanya bisa mengekstends satu abstract class lainnya.
- Suatu abstract class hanya bisa mengesktends satu abstract class dan mengimplement beberapa interface.
3. Key-key word :
- Abstract class digunakan sebagai basis bagi penurunan class lainnya, sehingga abstract class tidak dapat diinstansiasi secara langsung menjadi objek.
- Extends digunakan bila terjadi pewarisan, kelas yang mewariskan method dan atributnya disebut class super, sedangkan yang diwariskan disebut subclass.
- Implements termasuk dalam sebuah deklarasi kelas untuk menemukan satu atau lebih interface yang diimplementasikan oleh kelas saat ini. Kelas A mewarisi jenis dan metode abstrak dinyatakan oleh interface.
- Public merupakan access specifier yang menentukan visibility level dari method ini.
- Protected adalah member object dengan akses protected hanya dapat diakses dari dalam object.
- Private ialah member object dengan akses private sama dengan member protected.
- This digunakan untuk mewakili sebuah instance dari kelas di mana ia muncul. This dapat digunakan untuk mengakses anggota kelas sebagai referensi.
- Override adalah fitur bahasa yang memungkinkan subclass atau anak class untuk memberikan implementasi khusus dari metode yang sudah disediakan oleh salah satu superclass atau class induk.
- Parent Class merupakan class yang akan diturunkan.
- Child class merupakan class yang menerima penurunan.
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_") );
}
}
/*
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,karena abstract class tidak boleh memiliki method body.
2. Error yang terjadi jika method getValue dihapus ialah tidak ada method dan tidak ada override.
3. pada class Concrete1 terdapat protetcted yang hanya bisa di akses oleh kelas lain yang berada dalam satu package, sedangkan class Concrete2 terdapat public yang hanya bisa diakses atau dipanggil dari luar kelas di mana ia dideklarasikan.
4. pada class ConcreteClass1 tidak ada abstract dan tidak ada override dalam abstract method.
5. Karena pada ConcreteClass1 yaitu pada abstract classnya tidak bisa di instansiasi.
6.
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. 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. Terjadi error diprogram Mobil2, karena tidak ada abstract dan tidak ada override pada class Mobil2 yang mengimplementasikan mesin.
2.