Wednesday, June 29, 2011

Pewarisan(Inheritance) dalam Obyek Oriented Programming (OOP) Java

Salah satu konsep dalam Obyek Oriented Programming adalah Pewarisan atau yang lebih dikenal dengan Inheritance.

Apa itu Pewarisan ?
Konsep ini merupakan konsep yang diambil dari dunia nyata seperti halnya manusia yang mempunyai keturunan. Dalam Obyek Oriented Programming, suatu class dapat mempunyai class turunan. Sebagai contoh kita membuat class Manusia yang menampilkan keadaan kita. Obyek dari class Manusia adalah saya, anda, atau orang lain. Setiap manusia mempunyai atribut jumlah tangan, jumlah jari, golongan darah dan lain sebagainya. Manusia mempunyai method/perilaku makan, tidur, berjalan. Manusia tersebut bisa kita bagi dalam 2 jenis, yaitu laki-laki dan perempuan. Oleh karena itu kita buat 2 class turunan yaitu class laki-laki dan class perempuan yang mewarisi atribut dan method dari class manusia.

Meskipun dalam class laki-laki/perempuan mewarisi semua atribut dan method dari class manusia namun class laki-laki/perempuan bisa memiliki atribut dan method yang berbeda dengan class manusia. Yang perlu diingat bahwa class laki-laki atau perempuan mempunyai sesuatu yang lebih khusus dari pada class manusia.

Konsep Inhertance juga memungkinkan suatu class dapat mempunya class turunan. Inti sebenarnya dari konsep ini adalah untuk menggunakan lagi kode dalam suatu obyek yang terdiri dari variabel dan method yang telah dibuat sehingga kita tidak perlu menuliskannya lagi, cukup dengan menggunakan konsep inheritance.

Super Class dan Subclass
Dalam Inhertance, terdapat suatu class yang mempunyai class turunan yang disebut sebagai superclass atau parent class atau base class. Sedangkan class turanan itu disebut subclass atau child class. Subclass tersebut mewarisi semua yang dimiliki oleh parent class termasuk semua atribut dan method yang dimiliki oleh parent atau orang tuanya. Sehingga dapat disimpulkan bahwa subclass itu memperluas (extend) dari parent class-nya.

Untuk menunjukkan bahwa suatu class merupakan subclass dari class lainnya maka digunakan kata kunci extends. Kata kunci extends diletakkan setelah deklarasi nama class yang dilanjutkan dengan nama parent class-nya. Dalam Java semua class sebenarnya merupakan subclass dari class super induk yang bernama Obyek. Konsep ini diguanakan jika terdapat suatu class yang dapat diperluas dari class lain


Superclass
public class Pegawai{
public String nama;
public int gaji;
}

Subclass dari pegawai
public class Manager extends Pegawai{
public String departemen;
}

Konsep Inheritence dalam java hanya mempunyai fitur single inheritance, yaitu suatu class hanya boleh mempunya satu parent class. Tidak bisa dalam java suatu class mempunyai 2 parent class. Selain itu juga memperkenlaknan adanya multilevel inheritance, yaitu memperbolehkan suatu subclass mempunyai subclass lagi.

Untuk mengakses variabel dan method yang ada di parent class oleh subclass maka tidak berbeda dengan mengkases suatu variabel dan method yang ada di class itu sendiri. Dalam mengakses variable dan method supaya tidak bingung antara parent dan subclass maka digunakan keyword. Keyword super digunakan untuk merujuk pada variable atau method dari parent class, sedangkan this digunakan untuk merujuk pada variable dan method yang ada pada class itu sendiri.
Contoh : super.datamember -> ini merujuk pada datamember parent class
super.functiona() -> ini merujuk pada functiona() pada parent class
this.datamember -> ini merujuk pada datamember pada kelas dimana source ini ditulis
Contoh dalam program

public class Gaji {
public static void main(String[] args) {
Manager amin= new Manager();
amin.infogaji(25000);
}
}
class Pegawai{
public String nama;
public int gaji=10000;
}
class Manager extends Pegawai{
public int gaji=150000;
public void infogaji(int gaji){
System.out.println("Gaji dari parameter = "+gaji);
System.out.println("Gaji dari class pegawai = "+this.gaji);
System.out.println("Gaji dari class manager = "+super.gaji);
}
}

Hasil output
Gaji dari parameter = 25000
Gaji dari class pegawai = 150000
Gaji dari class manager = 10000

Dalam konsep inheritance, konstruktor yang dimiliki oleh parent class tidak diwariskan kepada child class oleh karena itu ketika membuat subclass maka kita harus memanggil konstruktor parent class di pada kontsruktor subclass dan harus dilakukan pada baris pertama dari subclass. Jika kita tidak mendeklarasikannya secara eksplisit maka secara otomatis java akan memanggil konstruktor parent class pada konstruktor subclass. Untuk memanggil konstruktor super class pada subclass maka dalam konstruktor subclass dengan menggunakan super().

Kontrol Pengaksesan
Dalam dunia nyata kadang seseorang tidak ingin mewariskan semua apa yang dimilikinya kepada turunannya karena suatu hal. Ini juga diadaptasi dalam konsep pewarisan dalam OOP Java. Semua variabel dan method yang ada di parent class bisa kita atur mana yang dapat diwariskan atau tidak pada turunannya. Untuk itu terdapat control pengaksesan terhadap variabel dan method yang dimiliki oleh parent class. Terdapat 4 kontrol pengaksesan yang ditempatkan pada variabel dan method yaitu
  • Public, jika variabel dan method dideklarasikan public ini berarti variable dan method tersebut bisa diakses dari class manapun.
  • Private, jika variabel dan method dideklarasikan private maka hanya bisa diakses oleh class yang mendeklarasikan variabel dan method tersebut
  • Protected, ini mempunyai kemampuan akses yang lebih daripada private, dalam hal ini variabel dan method bisa di akses dari oleh semua class dalam satu package selain itu juga bisa diakses oleh class yang lain diluar package jika class tersebut merupakan subclass dari class yang ada di package tersebut
  • Default, default adalah kondisi dimana variabel dan method tidak di deklarasikan dengan control private, protected maupun public. Variabel dan method tersebut bisa diakses oleh class dalam package yang sama dan class yang sama.

Contoh Program Penerapan Pewarisan

public class Gaji {
public static void main(String[] args) {
//membuat obyek amin inisialisasi dari class manager
Manager amin= new Manager();
/**meskipun amin merupakan inisialisasi dari class manager
namun juga mempunyai method infonama yang merupakan
turunan dari class dan bisa mengakses variabel nama
**/
amin.infonama();
amin.nama="Mahmud Amin";
amin.infonama();
amin.infogaji(25000);
}
}
class Pegawai{
//public merupakan kontrol dari variabel nama
public String nama="Mahmud";
public int gaji=10000;
public void infonama(){
System.out.println("Nama pegawai "+nama);
}
}
class Manager extends Pegawai{
public int gaji=150000;
public void infogaji(int gaji){
System.out.println("Gaji dari parameter = "+gaji);
//menampilkan gaji dari class manager 'subclass
System.out.println("Gaji dari class pegawai = "+this.gaji);
//menampilkan gaji dari parent class dari class manager yaitu class pegawai
System.out.println("Gaji dari class manager = "+super.gaji);
}
}

Hasil

Nama pegawai Mahmud
Nama pegawai Mahmud Amin
Gaji dari parameter = 25000
Gaji dari class pegawai = 150000
Gaji dari class manager = 10000

Referensi
1. Materi Kuliah OOP
2. en.wikipedia.org
3. java.about.com
4. Konsep Inheritance oleh Tita Karlita.

.