Memahami konsep polimorfisme (polymorphism) di program Java
Konsep Polimorfisme Java

Polymorphism adalah salah satu konsep penting dalam object oriented programming (OOP) di Java setelah abstraction dan inheritance. Polymorphism berarti banyak bentuk. Ada beberapa definisi berbeda tentang polymorphism. Sedangkan polymorphism sendiri sulit didefinisikan. Sejalan dengan contoh program Java sederhana yang diberikan, Anda diharapkan dapat mengerti atau memahami konsep polymorphism itu sendiri.

Polymorphism sering dikaitkan dengan penggunaan lebih dari satu metoda dengan nama sama. Penggunaan metoda dengan nama sama dapat melalui method overloading dan method overriding. Peran polymorphism tidak terbatas hanya pada hal-hal tersebut. Ada kaitan erat antara polymorphism dan inheritance (turunan).

Dalam konsep turunan Java, saat obyek dari subclass dikonstruksi, obyek dari superclass juga ikut dikonstruksi. Jadi setiap obyek (instance) dari subclass adalah juga instance dari superclass. Bila Anda mendeklarasikan metoda dengan parameter dari tipe superclass, Anda dibolehkan memberi argumen berupa obyek dari subclass yang merupakan turunan dari superclass tersebut.

Berikut ini adalah contoh program Java yang dapat memberi gambaran konsep polymorphism. Perlu dipahami bahwa kelas Object adalah akar dari semua kelas Java dan menduduki puncak tertinggi di dalam hierarki kelas. Program mendefinisikan kelas yang terkait bidang datar secara sederhana, termasuk beberapa kelas turunan seperti kelas PersegiPanjang dan Balok dan membatasi hanya pada penerapan method overriding.

// Nama file : Polimorphism.java
// Contoh penerapan konsep polimorphism
 
public class Polimorphism {
 
   public static void main(String[ ] args) {
 
      cetakObyek(new Balok());
      cetakObyek(new PersegiPanjang());
      cetakObyek(new BangunDatar());
      cetakObyek(new Object());
   }
    
   public static void cetakObyek(Object obyek) {
      System.out.println(obyek);
   }
 
} // Akhir kelas Polimorphism
 
class Balok extends PersegiPanjang {
   public String toString() {
      return "Mempunyai sisi panjang, lebar dan tinggi";
   }
}
 
class PersegiPanjang extends BangunDatar {
   public String toString() {
      return "Mempunyai sisi panjang dan lebar";
   }
}
 
class BangunDatar extends Object {
   public String toString() {
      return "Mempunyai berbagai bentuk";
   }
}
Konsep polimorfisme (polymorphism) di Java

Baris nomor 14 - 16 adalah deklarasi metoda cetakObyek yang mempunyai satu parameter tipe kelas Object. Kelas Object adalah akar dari semua kelas di Java. Langsung maupun tidak langsung, semua kelas di Java adalah turunan dari kelas Object. Anda dapat memanggil atau menggunakan metoda cetakObyek dengan argumen berupa obyek dari kelas turunan superclass Object.

Ketika metoda cetakObyek dipanggil di pernyataan baris nomor 8 - 11, argumen obyek akan diminta. obyek yang berfungsi sebagai argumen metoda dapat berupa obyek kelas turunan dari kelas Object yaitu kelas BangunDatar, kelas PersegiPanjang atau kelas Balok.

Masing-masing kelas turunan kemudian mendeklarasi ulang metoda toString dengan implementasi berbeda. Java Virtual Machine (JVM) akan menentukan secara dinamis implementasi metode toString yang digunakan saat program berjalan. Kemampuan menentukan secara dinamis ini disebut dengan dynamic binding.

Dari gambaran program di atas, bila parameter sebuah metoda adalah dari tipe superclass, maka argumen metoda yang diberikan dapat berupa tipe subclass. Konsep seperti inilah yang dimaksud dengan polymorphism.

Dengan demikian, dapat didefinisikan kembali bahwa polymorphism adalah kemampuan untuk menghasilkan sesuatu yang berbeda dengan cara yang sama. Pemberian obyek dari subclass ke obyek superclass dapat dilakukan tanpa perlu melakukan konversi.