Anda di halaman 1dari 17

Class & Object

(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:

class SubClassName extends Base-className {


//isi kode untuk SubClass
}
Contoh Membuat Kelas
Turunan
 Buatlah Java class baru, beri nama “TurunanBalok”, yang
merupakan turunan dari kelas Balok.
public class TurunanBalok extends Balok
{
private double berat;
public double getBerat() {
return berat;
}

public void setBerat(double berat) {


this.berat = berat;
}
}
Contoh Membuat Kelas
Turunan (Cont.)
 Kemudian buatlah kelas baru untuk menguji kelas baru
TurunanBalok tersebut.

public static void Main(string[] args){


TurunanBalok tbalok = new TurunanBalok();
tbalok.setBerat(5);
tbalok.CetakVolume();
JOptionPane.showMessageDialog(null,
"Beratnya adalah " +tbalok.getBerat());
}
Penggunaan Super Constructor
 Penggunaan kata kunci super mengacu kepada
kelas base-class. Jadi kita tidak perlu
menghapal nama kelas base dari kelas yang
sedang dibuat. Penggunaan super biasanya
dipakai untuk mengacu kepada constructor dari
base-class maupun mengacu kepada base-class
untuk memanggil method dari base-class.
Sebagai contohnya perhatikan modifikasi kelas
TurunanBalok berikut ini.
 Sebelumnya, tambahkan terlebih dahulu method
void cetakUkuran() ke kelas Balok.
public void CetakUkuran() {

JOptionPane.showMessageDialog(null, "Panjang nya = "+panjang);

JOptionPane.showMessageDialog(null, "Lebar nya = "+lebar);

JOptionPane.showMessageDialog(null, "Tinggi nya = "+tinggi); }


Penggunaan Super Constructor
(Cont.)
 Lalu, ubahlah kelas TurunanBalok menjadi seperti berikut:
public class TurunanBalok extends Balok{
private double berat;

public double getBerat() {


return berat;
}

public void setBerat(double berat) {


this.berat = berat;
}

public TurunanBalok() {
this.berat = 1;
}

public TurunanBalok(double berat, double p, double l, double t) {


super(p, l, t);
this.berat = berat;
}

@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.

TurunanBalok tbalok = new TurunanBalok(2,3,4,5);

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

 Kadang kala dalam sebuah kelas, kita hendak membuat method


yang implementasinya bergantung kepada kelas turunan.
Dengan demikian, method yang demikian tidak memerlukan
implementasi sama sekali. Method demikian dinamakan
method abstract.
 Apabila di dalam suatu kelas terdapat method abstract, maka
kelas tersebut merupakan kelas abstract pula, dan harus
ditambahkan kata kunci abstract di depan deklarasi kelas
tersebut. Method abstrak harus bertingkat akses public atau
protected, tidak boleh bertingkat akses private. Hal ini
dikarenakan method abstrak harus diimplementasikan oleh
kelas turunan sehingga jika bertingkat akses private, kelas
tersebut tidak dapat diakses oleh kelas turunan.
 Kelas abstract tidak dapat diinstansiasi (tidak dapat dibuat
objek). Cara menggunakan kelas abstrak adalah dengan
mendeklarasikan sebuah variabel bertipe kelas abstrak,
kemudian variabel tersebut merujuk ke kelas turunan dari
kelas abstrak tersebut. Untuk lebih jelasnya, perhatikanlah
contoh pembuatan kelas abstrak dan turunannya, dan contoh
pemakaiannya berikut ini.
Kelas Abstrak (Cont.)
abstract public class Bangun2D {
public String namaBangun;
int banyakSegi;

//method abstrak yang tidak mempunyai implementasi


//method abstrak harus bersifat public
abstract public double Luas();
abstract public void CetakUkuran();

//method non-abstrak
public void SetBanyakSegi(int n) {
banyakSegi = n;
}

}
Kelas Abstrak (Cont.)
 Kelas Turunannya :
public class PersegiPanjang extends Bangun2D{
double p, l;

//implementasi method abstrak Luas() dan CetakUkuran()


//untuk mengimplementasi, perlu ditambahkan kunci "override"

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

public double getP() {


return p;
}

public void setP(double p) {


this.p = p;
}

public double getL() {


return l;
}

public void setL(double l) {


this.l = l;
}

}
Kelas Abstrak (Cont.)
 Kelas turunannya yang lainnya:
public class Lingkaran extends Bangun2D{
double r;

public double getR() {


return r;
}

public void setR(double r) {


this.r = r;
}

//implementasi method abstrak


@Override
public void CetakUkuran(){
JOptionPane.showMessageDialog(null,"Jari-jari = "+r);
}
public double Luas(){
return Math.PI * r * r;
}
//constructor
public Lingkaran(){
r = 1;
namaBangun = "Lingkaran";
SetBanyakSegi(0);
}
public Lingkaran(double r){
this.r = r;
namaBangun = "Lingkaran";
SetBanyakSegi(0);
}
}
Kelas Abstrak (Cont.)
• Contoh Pemakaiannya:
public static void main(String[] args){
//mendeklarasikan
Bangun2D bangun;

//menciptakan objek turunan


PersegiPanjang pp = new PersegiPanjang(2,5);
Lingkaran lingk = new Lingkaran(10);

//bangun dirujuk ke pp
bangun = pp;
JOptionPane.showMessageDialog(null,"Nama Bangun : "+bangun.namaBangun);
bangun.CetakUkuran();
JOptionPane.showMessageDialog(null,"Luas = "+bangun.Luas());

//bangun dirujuk ke lingk


bangun = lingk;
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).

Anda mungkin juga menyukai