1.Apa saja keyword yang terdapat dalam interface?
2.Apa saja keyword yang terdapat dalam abstract
class?
3.Bagaimana penggunaan abstract class?
Sebelum
lanjut ke materi, saya akan menjelaskan terlebih dahulu dari
pertanyaan-pertanyaan diatas.
1. Keyword yang terdapat dalam interface yaitu
abstract dan implements.
Nah,
setelah kita mengetahui apa saja keyword yang terdapat dalam interface kita
lanjut ke keyword yang terdapat dalam abstract class ya sesuai dengan
pertanyaan di nomer 2.
2. Keyword yang terdapat dalam abstract class yaitu keyword
abstract.
3.
•
Hanya class abstract yang memiliki
method abstract
•
Method abstract tidak memiliki tubuh
method(body)
•
Method abstract harus di override oleh
subclass
Untuk lebih jelasnya, saya akan menjelaskan materi
lengkapnya sesuai tema yaitu ”PERBEDAAN INTERFACE DENGAN ABSTRACT CLASS”.
ABSTRACT
CLASS
Abstract class merupakan suatu class yang terdapat
dalam java yang merupakan turunan dari class super ke sub class. Abstract class
juga merupakan class khusus dari inheritance. Suatu abstract class tidak dapat
diinstansiasi serta tidak dapat digunakan untuk membuat sebuah objek.
Sifat:
•
Dapat diturunkan ke dalam bentuk kelas
konkret
•
Dapat diturunkan ke kelas abstrak selanjutnya
•
menggunakan keyword abstract
INTERFACE
Mengapa kita membutuhkan suatu interface?
Interface dalam bahasa pemrograman java dapat
menjadi solusi dalam sebuah permasalahan. Dimana, sebuah interface dapat
menjadi pemecah masalah yang rumit serta interface mampu menjawab segala
kekurangan yang terdapat dalam
inheritance. Interface dapat menjawab semua kebutuhan kita karena sebuah
interface bersifat multiple.
Nah, ini dia
pengertiannya.
Interface adalah sekumpulan method yang hanya memuat
sturktur-struktur method saja, tipe datanya konstan(tetap) serta digunakan
untuk menyatakan spesifikasi fungsional dari beberapa kelas.
Cirri-ciri dari sebuah
interface:
1. Method interface
tidak mempunyai body method(tidak memiliki tubuh)
2. sebuah interface
tidak dapat membuat objek baru.
3. Sebuah interface
tidak memiliki kode impelementasi.
Aturan umum untuk
mendeklarasikan sebuah interface:
1. Modifier yang
digunakan hanyalah satu yaitu public.
2.
Mendeklarasikan sebuah variable dalam interface haruslah diberikan nilai karena
bersifat static final.
3. Menggunakan keywords
implements.
4. Sebuah class yang
mengimplements sebuah interface, harus meng-override method.
Setelah kita mengetahui Interface dan abstract class
secara detail. Selanjutnya saya akan menjelaskan perbedaan dari keduanya.
PERBEDAAN ABSTACT CLASS DAN
INTERFACE DALAM JAVA
Abstract
Class :
1. Suatu abstract class hanya dapat digunakan
sebagai superclass
2. Methodnya concrete
Interface :
1. Seluruh method haruslah method abstract
2. Tipe datanya konstan atau tetap.
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_") );
}
}
Pengamatan1
:
1. Bolehkah ditambahkan body "{statement1;
statement1;}" pada method getValue ataupun method prefixValue pada class
abstract AbstractClass? Jelaskan!
Jawab : Diperbolehkan, karena penambahan statement1;
statement1; tidak mempengaruhi suatu
aturan yang dimiliki abstract class
aturan yang dimiliki abstract class
2. Kembalikan program seperti semula, jelaskan error
apa yang terjadi apabila method
getValue() pada class ConcreteClass1 di hapus!
getValue() pada class ConcreteClass1 di hapus!
Jawab : Concrete class tidak abstract dan tidak ada
suatu override class di concrete class yang
mampu meng extends abstarct class
mampu meng extends abstarct class
3. Kembalikan program seperti semula, selanjutnya
perhatikan perbedaan hak akses method getValue() di child class ConcreteClass1
dan ConcreteClass2! Jelaskan apa maksudnya!
Jawab : Di Concreteclass1 hak akses method getValue
merupakan suatu protected sedangkan hak
akses method getvalue di concreteclass2 merupakan suatu public
akses method getvalue di concreteclass2 merupakan suatu public
4. Buatlah abstract method yang bernama getValue2
pada class ConcreteClass1! Compile dan
mengapa terjadi error?
mengapa terjadi error?
Jawab : Suatu file yang tidak dapat mencapai hasil
akhir dan bersifat sementara
5. Ikuti soal nomor 4, silahkan ubah class
ConcreteClass1 menjadi abstract. Selajutnya jelaskan
mengapa terjadi error?
mengapa terjadi error?
Jawab : Suatu file dengan nama abstract tidak dapat
ditemukan pada file java
6. Dengan mengikuti struktur kode program di atas
serta ditambahkan satu abstract method bernama "gabung" TANPA
PARAMETER pada parent class, hasilkan output berikut.
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
2:
1.
Compile kode program diatas dan jelaskan sebab error yang terjadi!
Jawab
: Tidak ditemukannya simbol:
Mobil m1 = new mobill(); yang
berlokasi di class main
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!
interface Mobil? Jelaskan!
-
Jelaskan perbedaan body program antara class abstract dan interface!
jawab
:
pada abstract class tidak
terdapat badn method namun hanya mendeklarasikan isi
methodnya saja, sedangkan pada interface, interface tidak mempunyai statement serta
memiliki method yang kosong.
methodnya saja, sedangkan pada interface, interface tidak mempunyai statement serta
memiliki method yang kosong.
-
Jelaskan perbedaan penggunaan extends antara soal 1 dan soal 2!