(Inheritance)
Perbedaan Base-Class dan
Subclass
Pada modul sebelumnya, kita telah mempelajari cara
pembuatan suatu class. Dalam JAVA, kita dapat membuat
suatu kelas baru yang mewarisi sifat-sifat kelas yang ada.
Kelas baru yang dibuat tersebut disebut subclass/class anak
dan kelas yang mewariskan sifat disebut base-class/class
induk.
Subclass mewarisi data-data dan atribut dari base-class-
nya, dan memiliki data-data dan atribut baru yang
didefinisikan. Subclass juga dapat dibuat subclass lagi, dan
seterusnya.
Sebagai contohnya misalkan kita membuat kelas
MakhlukHidup. Dari kelas MakhlukHidup, diturunkan suatu
kelas misalnya kelas Binatang dan Tumbuhan. Dari kelas
Binatang, dapat diturunkan lagi menjadi kelas Herbivora,
Karnivora, dan Omnivora. Secara hirarki, kelas tersebut
dapat diilustrasikan sebagai berikut:
Perbedaan Base-Class dan
Subclass (Cont.)
Cara Membuat Kelas Turunan
(Subclass) -- Inheritance
Kerangka umum pembuatan class adalah:
public TurunanBalok() {
this.berat = 1;
}
@Override
public void CetakUkuran() {
super.CetakUkuran(); //To change body of generated methods, choose Tools | Templates.
JOptionPane.showMessageDialog(null, "Beratnya adalah " +berat);
}
}
Penggunaan Kata Kunci base
(Cont.)
Untuk mencoba kelas TurunanBalok tersebut,
kita akan coba membuat program utamanya
sebagai berikut.
tbalok.CetakVolume();
tbalok.CetakUkuran();
Melakukan Override Terhadap
suatu Method
Saat membuat kelas turunan, maka objek dari kelas
turunan akan mewarisi data dan method dari kelas
base. Dalam kelas turunan kita membuat method yang
bernama yang sama dengan method kelas base dengan
cara “menimpa (override)” method yang ada di base
class.
Kegunaan dari mengoverride suatu method adalah
kadang-kadang kita merasa method yang diwarisi dari
kelas base tidak cocok dengan kelas turunan yang
dibuat, sehingga harus menyesuaikan method dengan
kelas turunan baru.
Method Overriding dapat dibuat dengan menambahkan
anotasi ‘@Override’ di atas nama method atau sebelum
pembuatan method.
Melakukan Override Terhadap
suatu Method (Cont.)
Mengoverride method CetakUkuran pada kelas
TurunanBalok, tambahkan kata kunci override pada
method CetakUkuran() seperti berikut.
@Override
public void CetakUkuran() {
super.CetakUkuran();
JOptionPane.showMessageDialog(null, "Beratnya
adalah " +berat);
}
Kelas Abstrak
//method non-abstrak
public void SetBanyakSegi(int n) {
banyakSegi = n;
}
}
Kelas Abstrak (Cont.)
Kelas Turunannya :
public class PersegiPanjang extends Bangun2D{
double p, l;
@Override
public double Luas() {
return p * l;
}
public void CetakUkuran() {
JOptionPane.showMessageDialog(null,"Panjang = "+p);
JOptionPane.showMessageDialog(null,"Lebar = "+l);
}
//constructor
public PersegiPanjang(){
p = 1; l = 1;
namaBangun = "Persegi Panjang";
SetBanyakSegi(4);
}
public PersegiPanjang(double p, double l){
this.p = p;
this.l = l;
namaBangun = "Persegi Panjang";
SetBanyakSegi(4);
}
}
Kelas Abstrak (Cont.)
Kelas turunannya yang lainnya:
public class Lingkaran extends Bangun2D{
double r;
//bangun dirujuk ke pp
bangun = pp;
JOptionPane.showMessageDialog(null,"Nama Bangun : "+bangun.namaBangun);
bangun.CetakUkuran();
JOptionPane.showMessageDialog(null,"Luas = "+bangun.Luas());
}
Kelas Abstrak (Cont.)
Pada program di atas, kita membuat kelas Bangun2D yang merupakan kelas
abstrak dan mempunyai 2 method abstrak, yaitu (1) double Luas() dan (2)
void CetakUkuran(). Kemudian dibuat kelas turunan dari Bangun2D, yaitu (1)
kelas PersegiPanjang dan (2) kelas Lingkaran.
Oleh karena Bangun2D mempunyai 2 method abstrak, maka kedua method
abstrak tersebut harus diimplementasikan dalam kelas PersegiPanjang
maupun kelas Lingkaran. Dalam kelas turunan, kita bebas memberikan data
baru maupun method baru. Namun harus diingat bahwa kelas turunan
mewarisi data dan method dari kelas base.
Perhatikan bahwa method Luas() dan CetakUkuran() sangat bergantung
kepada kelas turunan. Dalam kelas PersegiPanjang, implementasi method
tersebut berbeda dengan implementasi pada kelas Lingkaran.
Pada program PemakaianKelasBangun2D, pertama-tama dideklarasikan suatu
variabel bangun yang bertipe Bangun2D. Ingat bahwa kita tidak dapat
membuat objek bangun, karena kelas Bangun2D merupakan kelas abstrak.
Kemudian kita membuat 2 objek, yaitu objek pp bertipe PersegiPanjang, dan
objek lingk bertipe Lingkaran. Saat pembuatan objek, kita mendefinisikan
bahwa pp berukuran 2x5, sedangkan lingk mempunyai jari-jari 10.
Perhatikan bahwa bangun dapat dirujuk ke objek pp maupun lingk (baris ke 11
dan 18). Saat dirujuk ke objek berbeda, maka bangun mempunyai perilaku
sesuai dengan objek yang dirujuknya (baris ke-12 s/d 14 sama dengan baris
ke-19 s/d 21, namun memberikan hasil output yang berbeda).