Polimorfisme adalah kemampuan suatu benda untuk mempunyai banyak bentuk. Penggunaan yang paling umum dari polimorfisme di OOP/PBO terjadi ketika referensi kelas induk (superclass) digunakan untuk merujuk ke objek kelas anak (subclass).
Dalam Java semua object Java adalah polimorfik karena objek apapun akan melewati tes untuk tipe mereka sendiri dan untuk Object kelas.
Hal ini penting untuk mengetahui bahwa satu-satunya cara yang mungkin untuk mengakses objek melalui variabel referensi. Sebuah variabel referensi hanya dapat dari satu jenis. Setelah menyatakan, jenis variabel referensi tidak dapat diubah.
Variabel referensi dapat dipindahkan ke objek lain asalkan tidak dideklarasikan akhir. Jenis variabel referensi akan menentukan metode yang dapat memanggil pada objek.
Sebuah variabel referensi dapat mengacu pada setiap objek dari jenis dinyatakan atau subtipe dari jenis dideklarasikan. Sebuah variabel referensi dapat dideklarasikan sebagai kelas atau tipe interface.
Sebagai contoh, berikut sourcecode yang telah saya buat.
public abstract class Karyawan {
protected String nama;
protected String jabatan;
protected double gajibersih;
protected double gajikotor;
protected double gajipokok;
protected double uangmakan;
public Karyawan()
{
gajipokok=1000000.0;
}
public void setNama (String name)
{
this.nama=name;
}
public String getNama()
{
System.out.println ("Nama Karyawan : " +nama);
return nama;
}
public String jabatan()
{
System.out.println ("Posisi : " +jabatan);
return jabatan;
}
public abstract double perhitungangaji();
}
public class KaryawanKontrak extends Karyawan{
public KaryawanKontrak()
{
jabatan="Karyawan Kontrak";
uangmakan=500000.0;
}
public double perhitungangaji()
{
double potongan;
gajikotor=gajipokok+uangmakan;
potongan=(5.0/100.0)*gajikotor;
gajibersih=gajikotor-potongan;
System.out.println ("Gaji Pokok : Rp. " +gajipokok);
System.out.println ("Uang Makan : Rp. " +uangmakan);
System.out.println ("Gaji Kotor : Rp. " +gajikotor);
System.out.println ("Potongan : Rp. " +potongan);
System.out.println ("Gaji Bersih : Rp. " +gajibersih);
return gajibersih;
}
}
public class KaryawanTetap extends Karyawan{
double tunjangankinerja;
public KaryawanTetap()
{
jabatan="Karyawan Tetap";
uangmakan=750000.0;
tunjangankinerja=500000.0;
}
public double perhitungangaji()
{
double potongan;
gajikotor=gajipokok+uangmakan+tunjangankinerja;
potongan=(10.0/100.0)*gajikotor;
gajibersih=gajikotor-potongan;
System.out.println ("Gaji Pokok : Rp. " +gajipokok);
System.out.println ("Uang Makan : Rp. " +uangmakan);
System.out.println ("Tunjangan Kinerja : Rp. " +tunjangankinerja);
System.out.println ("Gaji Kotor : Rp. " +gajikotor);
System.out.println ("Potongan : Rp. " +potongan);
System.out.println ("Gaji Bersih : Rp. " +gajibersih);
return gajibersih;
}
}
public class Manajer extends Karyawan{
double tunjangankinerja;
double tunjanganjabatan;
public Manajer()
{
jabatan="Manajer";
uangmakan=750000.0;
tunjangankinerja=1000000.0;
tunjanganjabatan=1000000.0;
}
public double perhitungangaji()
{
double potongan;
gajikotor=gajipokok+uangmakan+tunjangankinerja+tunjanganjabatan;
potongan=(15.0/100.0)*gajikotor;
gajibersih=gajikotor-potongan;
System.out.println ("Gaji Pokok : Rp. " +gajipokok);
System.out.println ("Uang Makan : Rp. " +uangmakan);
System.out.println ("Tunjangan Kinerja : Rp. " +tunjangankinerja);
System.out.println ("Tunjangan Jabatan : Rp. " +tunjanganjabatan);
System.out.println ("Gaji Kotor : Rp. " +gajikotor);
System.out.println ("Potongan : Rp. " +potongan);
System.out.println ("Gaji Bersih : Rp. " +gajibersih);
return gajibersih;
}
}
public class MainGaji {
public static void main (String [] args)
{
Karyawan ref;
KaryawanKontrak Ilham=new KaryawanKontrak();
KaryawanTetap Ulil=new KaryawanTetap();
Manajer Amry=new Manajer();
System.out.println ("DAFTAR GAJI KARYAWAN X-Treamly Corp.");
System.out.println ("\n");
ref=Ilham;
ref.setNama ("Ilham");
ref.getNama();
ref.jabatan();
ref.perhitungangaji();
System.out.println ("\n");
ref=Ulil;
ref.setNama ("Ulil");
ref.getNama();
ref.jabatan();
ref.perhitungangaji();
System.out.println ("\n");
ref=Amry;
ref.setNama ("Amry");
ref.getNama();
ref.jabatan();
ref.perhitungangaji();
}
}
Maka jika dibuild dan run akan tampil seperti berikut:
DAFTAR GAJI KARYAWAN X-Treamly Corp.
Nama Karyawan : Ilham
Posisi : Karyawan Kontrak
Gaji Pokok : Rp. 1000000.0
Uang Makan : Rp. 500000.0
Gaji Kotor : Rp. 1500000.0
Potongan : Rp. 75000.0
Gaji Bersih : Rp. 1425000.0
Nama Karyawan : Ulil
Posisi : Karyawan Tetap
Gaji Pokok : Rp. 1000000.0
Uang Makan : Rp. 750000.0
Tunjangan Kinerja : Rp. 500000.0
Gaji Kotor : Rp. 2250000.0
Potongan : Rp. 225000.0
Gaji Bersih : Rp. 2025000.0
Nama Karyawan : Amry
Posisi : Manajer
Gaji Pokok : Rp. 1000000.0
Uang Makan : Rp. 750000.0
Tunjangan Kinerja : Rp. 1000000.0
Tunjangan Jabatan : Rp. 1000000.0
Gaji Kotor : Rp. 3750000.0
Potongan : Rp. 562500.0
Gaji Bersih : Rp. 3187500.0