Polymorphism and Inheritance in Java

Inheritance

Salah satu konsep dasar dari pemrograman berbasis objek pada java adalah Inheritance, berikut ini saya akan memberikan sedikit gambaran tentang inheritance.
Pada dasarnya, kita melakukan inheritance(pewarisan) untuk membuat suatu class baru(class turunan/subclass) yang masih memiliki sifat atau spesifikasi dari superclass.
Di dalam Java untuk mendeklarasikan suatu class sebagai subclass dilakukan dengan cara menambahkan kata kunci extends setelah deklarasi nama class, kemudian diikuti dengan nama parent class-nya. Kata kunci extends tersebut memberitahu kompiler Java bahwa kita ingin melakukan perluasan class.

Contoh:

public class Mamalia {
void KelasMamalia () {
…..
}}
class Paus extends Mamalia {
void TampilkanPaus () {
…..
}}

Pada saat class Paus menurunkan atau memperluas (extend) class Mamalia, maka ia mewarisi data member yang dipunyai oleh class Mamalia. Dengan demikian, class Paus mempunyai data member yang diwarisi oleh Mamalia (behaviournya), ditambah dengan data member yang ia punyai (tempat hidup,dsb).

Beberapa aturan tentang pewarisan(inheritance) yang perlu diperhatikan :
1. Java hanya memperkenankan adanya single inheritance. Konsep single inheritance hanya memperbolehkan suatu sublass mempunyai satu parent class. Dengan konsep single inheritance ini, masalah pewarisan akan dapat diamati dengan mudah.

2. Subclass juga merupakan class biasa, maka kita tetap dapat melakukan pewarisan pada subclass ini. Misal : class B merupakan subclass dari class A, kita dapat membuat class baru yang diturunkan dari class B sehingga class baru tersebut akan memiliki apa yang dimiliki oleh class A dan class B.

3. Suatu parent class dapat tidak mewariskan sebagian member-nya kepada subclass-nya. Sejauh mana suatu member dapat diwariskan ke class lain, ataupun suatu member dapat diakses dari class lain, sangat berhubungan dengan access control (kontrol pengaksesan). Di dalam java, kontrol pengaksesan dapat digambarkan dalam tabel berikut ini:

Modifier

Class

Yang sama

Package

Yang sama

Subclass

Class Manapun

Private

 

 

 

Default

 

 

Protected

 

Public

Contoh :

//Karyawan.java

public class Karyawan {
private String nama;
private String nip;
private String golongan;
private double gaji;
public void setNama(String nama)
{
this.nama=nama;
}
public void setNip(String nip)
{
this.nip=nip;
}
public void setGolongan(String golongan)
{
this.golongan=golongan;
switch(golongan.charAt(0)){
case ‘1’:this.gaji=10000000;
break;
case ‘2’:this.gaji=8000000;
break;
case ‘3’:this.gaji=5000000;
break;
case ‘4’:this.gaji=3000000;
break;
case ‘5’:this.gaji=1000000;
break;
}
}
public void setGaji(double gaji)
{
this.gaji=gaji;
}
public String getNama()
{
return nama;
}
public String getNip()
{
return nip;
}
public String getGolongan()
{
return golongan;
}
public double getGaji()
{
return gaji;
}
}

//Manager.java

public class Manager extends Karyawan {
private double tunjangan;
private String bagian;
private Staff st[];

public void setTunjangan(double tunjangan)
{
this.tunjangan=tunjangan;
}
public double getTunjangan()
{
return tunjangan;
}
public void setBagian(String bagian)
{
this.bagian=bagian;
}
public String getBagian()
{
return bagian;
}
public void setStaff(Staff st[])
{
this.st=st;
}

public void viewStaff()
{
int i;
System.out.println(“——————–“);
for(i=0;i<st.length;i++)
{
st[i].lihatInfo();
}
System.out.println(“——————–“);
}
public void lihatInfo()
{
System.out.println(“Manager :”+this.getBagian());
System.out.println(“NIP :”+this.getNip());
System.out.println(“Nama :”+this.getNama());
System.out.println(“Golongan :”+this.getGolongan());
System.out.printf(“Tunjangan :%.0f\n”,this.getTunjangan());
System.out.printf(“Gaji :%.0f\n”,this.getGaji());
System.out.println(“Bagian :”+this.getBagian());
this.viewStaff();
}
public double getGaji()
{
return super.getGaji()+tunjangan;
}
}

//Staff.java

public class Staff extends Karyawan {
private int lembur;
private double gajiLembur;
public void setLembur(int lembur)
{
this.lembur=lembur;
}
public int getLembur()
{
return lembur;
}
public void setGajiLembur(double gajiLembur)
{
this.gajiLembur=gajiLembur;
}
public double getGajiLembur()
{
return gajiLembur;
}
public double getGaji(int lembur,double gajiLembur)
{
return super.getGaji()+lembur*gajiLembur;
}
public double getGaji()
{
return super.getGaji()+lembur*gajiLembur;
}
public void lihatInfo()
{
System.out.println(“NIP :”+this.getNip());
System.out.println(“Nama :”+this.getNama());
System.out.println(“Golongan :”+this.getGolongan());
System.out.println(“Jml Lembur :”+this.getLembur());
System.out.printf(“Gaji Lembur :%.0f\n”, this.getGajiLembur());
System.out.printf(“Gaji :%.0f\n”,this.getGaji());
}
}

//Utama.java

public class Utama {

public static void main(String[] args)
{
System.out.println(“Program Testing Class Manager & Staff”);
Manager man[]=new Manager[2];
Staff staff1[]=new Staff[2];
Staff staff2[]=new Staff[3];
//pembuatan manager
man[0]=new Manager();
//Bedjo
man[0].setNama(“Tania”);
man[0].setNip(“101”);
man[0].setGolongan(“1”);
man[0].setTunjangan(5000000);
man[0].setBagian(“Administrasi”);
man[1]=new Manager();
//atika
man[1].setNama(“Noer”);
man[1].setNip(“102”);
man[1].setGolongan(“1”);
man[1].setTunjangan(2500000);
man[1].setBagian(“Sales”);
// staff bedjo
staff1[0]=new Staff();
staff1[0].setNama(“Wijanarko”);
staff1[0].setNip(“0003”);
staff1[0].setGolongan(“2”);
staff1[0].setLembur(10);
staff1[0].setGajiLembur(10000);
staff1[1]=new Staff();
staff1[1].setNama(“Arko”);
staff1[1].setNip(“0005”);
staff1[1].setGolongan(“2”);
staff1[1].setLembur(10);
staff1[1].setGajiLembur(55000);
man[0].setStaff(staff1);
//staff atika
staff2[0]=new Staff();
staff2[0].setNama(“Noer”);
staff2[0].setNip(“0004”);
staff2[0].setGolongan(“3”);
staff2[0].setLembur(15);
staff2[0].setGajiLembur(5500);

staff2[1]=new Staff();
staff2[1].setNama(“Fachmi”);
staff2[1].setNip(“0006”);
staff2[1].setGolongan(“4”);
staff2[1].setLembur(5);
staff2[1].setGajiLembur(100000);

staff2[2]=new Staff();
staff2[2].setNama(“Rina”);
staff2[2].setNip(“0007”);
staff2[2].setGolongan(“3”);
staff2[2].setLembur(6);
staff2[2].setGajiLembur(20000);
man[1].setStaff(staff2);
//cetak informasi dari manager + staffnya
man[0].lihatInfo();
man[1].lihatInfo();
}

}

Polimorfisme

Dalam pemrograman berorientasi object kita mengenal suatu istilah yaitu “ Polimorfisme ”, yaitu suatu teknik dalam programming yang lebih mengarahkan kita untuk memprogram secara general dari pada secara spesifik. Sebagai contoh seumpama kita memiliki 3 class berbeda yaitu: “Motor”, “Mobil” dan “Pesawat”. Dimana ketiga class tersebut adalah turunan dari class “Kendaraan”. Dalam kelas kedaraan terdapat suatu method yaitu “Move()”, akan tetapi apakah method “Move()” akan memberikan hasil yang sama pada tiga class tersebut. Dimana jika method “Move()” dipanggil pada class “Motor” akan menghasilkan perpindahan 30Km, jika pada class “Mobil” akan menghasilkan perpindahan 70Km dan jika dipanggil pada class “Pesawat” akan menghasilkan perpindahan 300Km. Hal inilah yang kita sebut sebagai Polimorfisme , yaitu penggunaan method yang sama, yang akan menghasilkan suatu hasil yang berbeda tergantung class yang menggunakan method tersebut.
Berikut ini adalah contoh program java yang menggunakan polimorfisme :
Kemampuan dari referensi untuk mengubah sifat menurut object apa yang dijadikan acuan dinamakan polimorfisme. Polimorfisme menyediakan multiobject dari subclasses yang berbeda untuk diperlakukan sebagai object dari superclass tunggal, secara otomatis menunjuk method yang tepat untuk menggunakannya ke particular object berdasar subclass yang termasuk di dalamnya.
Contoh lain yang menunjukkan properti polimorfisme adalah ketika kita mencoba melalui referensi ke method.
contoh :

//Karyawan.java

public class Karyawan
{
private String nama;
private String alamat;
private int no;
public Employee(String nama, String alamat, int no)
{
System.out.println(“Constructing an Employee”);
this.name = nama;
this.address = alamat;
this.number = no;
}
public void mailCheck()
{
System.out.println(“Mailing a check to ” + this.nama
+ ” ” + this.alamat);
}
public String toString()
{
return nama + ” ” + alamat + ” ” + no;
}
public String getNama()
{
return nama;
}
public String getAlamat()
{
return alamat;
}
public void setAlamat(String newAlamat)
{
address = newAlamat;
}
public int getNo()
{
return no;
}
}

//gaji.java

public class Salary extends Karyawan
{
private double gaji;
public Salary(String nama, String alamat, int no, double gaji)
{
super(nama, alamat, no);
setGaji(gaji);
}
public void mailCheck()
{
System.out.println(“Dalam MAILCHECK Gaji class “);
System.out.println(“Mailing periksa untuk ” + getNama)
+ ” with gaji ” + gaji);
}
public double getGaji()
{
return gaji;
}
public void setGaji(double newGaji)
{
if(newGaji >= 0.0)
{
gaji = newGaji;
}
}
public double perhitungangaji()
{
System.out.println(“perhitungan gaji untuk ” + getNama());
return gaji/52;
}
}

//tampilan.java

public class tampilan
{
public static void main(String [] args)
{
gaji s = new gaji(“”);
karyawan e = new gaji(“”);
System.out.println(“”);
s.mailCheck();
System.out.println(“”);
e.mailCheck();
}
}

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s