Polimorfisme merupakan konsep pokok didalam perancangan orientasi objek. Polymorphisme berarti mempunyai banyak bentuk. Dua objek atau lebih dikatakan sebagai polymorphic bila objek-objek itu mempunyai antarmuka-antarmuka yang identik namun mempunyai perilaku-perilaku berbeda. Polymorphisme berupa satu nama tunggal (seperti deklarasi fungsi) dan dapat menyatakan objek-objek kelas-kelas berbeda yang terhubung dengan satu super kelas yang common diantara kelas-kelas itu. Sembarang objek ditandai dengan nama ini akan dapat menanggapi sekumpulan operasi yang common.
Polymorphisme merupakan fitur yang ada karena interaksi konsep pewarisan dan dynamic binding. Polymorphisme merupakan fitur penting dan ampuh bahasa pemrograman orientasi objek. Kepentingannya merupakan peringkat kedua setelah dukungan terhadap abstraksi orientasi objek. Fitur ini merupakan pembeda orientasi objek dari bahasa tradisional yang hanya sampai pada tipr data abstrak. Bahasa yang tidak mendukung polymorphisme belum layak disebut bahasa pemrograman orientasi objek, paling-paling bahasa disebut bahasa berbasis objek bila telah mendukung pengapsulan.
Polymorphisme memungkinkan kita mengenali dan mengeksploitasi keserupaan-keserupaan di antara kelas-kelas berbeda. Ketika kita mengenali bahwa beberapa jenis objek dapat menanggapi pesan yang sama. Kita mengenali tidak adanya pembeda antara nama pesan dan metode. Objek mengirim pesan, jika penerima mengimplementasikan metode dengan penanda sama maka objek itu akan memberi tanggapan khas. Tanggapan-tanggapan berbeda dimungkinkan, metode-metode yang berbeda dari instan kelas-kelas berbeda. Pengiriman cukup menerima pesan, tidak perlu peduli dengan kelas dari objek pertama.
Berikut adalah contoh syntaxnya:
– Pertama kita membuat kelas Kendaraan
//Class kendaraan.java public class Kendaraan { private int posisi; public Kendaraan(int posisi) { this.posisi = posisi; } public void Move() { return; } public int getPosisi() { return posisi; } public void setPosisi(int posisi) { this.posisi = posisi; } }
– kemudian kita membuat kelas motor sebagai subkelas dari kelas kendaraan
//Class motor.java public class Motor extends Kendaraan { public Motor(int posisi) { super(posisi); } @Override public void Move() { setPosisi(getPosisi() + 30); } }
– Kita tambahkan satu subkelas lagi dari kelas Kendaraan yaitu kelas Mobil
public class Mobil extends Kendaraan { public Mobil(int posisi) { super(posisi); } @Override public void Move() { setPosisi(getPosisi() + 70); } }
– Kemudian kita buat satu subkelas lagi yaitu kelas Pesawat
//Class pesawat.java public class Pesawat extends Kendaraan { public Pesawat(int posisi) { super(posisi); } @Override public void Move() { setPosisi(getPosisi() + 300); } }
– kemudian kita buat kelas utama yaitu kita dengan nama Kelas Main
//Class Main.java public class Main { public static void main(String[] args) { Kendaraan kendaraan[] = new Kendaraan[3]; int posisi = 10; kendaraan[0] = new Motor(posisi); kendaraan[1] = new Mobil(posisi); kendaraan[2] = new Pesawat(posisi); System.out.println("Intansiasi 3 Object Turunan Class Kendaraan"); System.out.println(" -kendaraan[0] merupakan instantsiasi dari class " + "Motor dengan posisi awal " + posisi); System.out.println(" -kendaraan[1] merupakan instantsiasi dari class " + "Mobil dengan posisi awal " + posisi); System.out.println(" -kendaraan[2] merupakan instantsiasi dari class " + "Pesawat dengan posisi awal " + posisi); for (int i = 0; i < kendaraan.length; i++) { System.out.println("Object [" + i + "] memanggil method move"); System.out.println("Posisi sebelum method move() dipanggil : " + kendaraan[i].getPosisi()); kendaraan[i].Move(); System.out.println("Posisi setelah method move() dipanggil : " + kendaraan[i].getPosisi()); System.out.println(); } } }
Maka outputnya akan seperti ini: