Belajar Pemrograman Java Dari Dasar

Polymorphism Dalam Belajar Bahasa Pemrograman Java

Apa Itu Polymorphism?

Ketika anda belajar bahasa pemrograman Java, memahami mengenai polymorphism sebagai salah satu konsep penting dari Java selain inheritance, abstraction dan encapsulation adalah hal yang sangat penting.

Polymorphism artinya memiliki banyak bentuk.

Polymorphism pada konsep Object Oriented Programming merupakan proses untuk merepresentasikan satu bentuk ke dalam banyak bentuk.

Ini mungkin terdengar sangat membingungkan, tapi dengan coding, semuanya akan jelas.


polymorphism_pada_program_java


Untuk mudahnya, misalkan anda menulis kode seperti ini:

public class Manusia {
 
 
 void makan(){
  
 }
 
 void tidur(){
  
 }
 
 void bergerak(){
  
 }

}

Pada kode di atas, objek Manusia dapat melakukan 3 jenis aktivitas yaitu makan, tidur dan bergerak.

Namun, perlu diingat, aktivitas itu bisa dilakukan juga oleh objek sub class dari class Manusia ataupun class apa saja yang di atasnya terdapat class Manusia yang terkait dalam hirarki inheritance.

Oke, selanjutnya perhatikan kode di bawah ini:

public class Siswa extends Manusia {
 
}

public class Test {
 
 public static void main(String[] args) {
  
  Siswa siswa_A = new Siswa();
  
 }

}

Pada kode di atas, karena class Siswa extends dari class Manusia, maka siswa juga adalah manusia, atau Siswa IS-A Manusia, dan objek siswa ini bisa juga makan, tidur dan bergerak.

Kemudian ketika objek siswa dibuat dengan pernyataan:

Siswa siswa_A = new Siswa();

Artinya, siswa_A merupakan variabel referensi objek dengan tipe Siswa, demikian juga dengan objek yang dibuat merupakan objek Siswa, dinyatakan dengan new Siswa();.

Namun, dengan polymorphism, tipe variabel referensi objek dan tipe objek bisa berbeda.

Contoh:

Manusia siswa_A = new Siswa();

Apa artinya?

Artinya, tipe variabel referensi merupakan Manusia, sedangkan objek yang dibuat adalah tipe Siswa yang dinyatakan dengan new Siswa(). Dengan kata lain, ini adalah dua tipe yang berbeda!.

Dengan menggunakan polymorphism maka tipe variabel referensi dari tipe objek aktual bisa menggunakan super class.

Perhatikan kode simpel yang terdiri dari beberapa class berikut ini, maka anda akan lebih memahami polymorphism.

//Superclass
public class Manusia {
 
 
 void makan(){
  System.out.println("Manusia makan");
 }
 
 void tidur(){
  System.out.println("Manusia tidur");
 }
 
 void bergerak(){
  System.out.println("Manusia bergerak");
 }

}


public class Siswa extends Manusia {
 
 @Override
 void makan(){
  System.out.println("Siswa makan");
 }
 
 @Override
 void tidur(){
  System.out.println("Siswa tidur");
 }
 
 @Override
 void bergerak(){
  System.out.println("Siswa bergerak");
 }
 
}


public class Karyawan extends Manusia {
 
 @Override
 void makan(){
  System.out.println("Karyawan makan");
 }
 
 @Override
 void tidur(){
  System.out.println("Karyawan tidur");
 }
 
 @Override
 void bergerak(){
  System.out.println("Karyawan bergerak");
 }

}


public class Programmer extends Manusia{
 
 @Override
 void makan(){
  System.out.println("Programmer makan");
 }
 
 @Override
 void tidur(){
  System.out.println("Programmer tidur");
 }
 
 @Override
 void bergerak(){
  System.out.println("Programmer bergerak");
 }

}


public class Professor extends Manusia {
 
 @Override
 void makan(){
  System.out.println("Professor makan");
 }
 
 @Override
 void tidur(){
  System.out.println("Professor tidur");
 }
 
 @Override
 void bergerak(){
  System.out.println("Professor bergerak");
 }

}


//Class Test untuk mendemonstrasikan polymorphism
public class Test {
 
 public static void main(String[] args) {
  
  //Mendeklarasikan array dengan tipe Manusia.
  //Dengan kata lain sebagai array yang memegang objek dari
  //tipe manusia
  Manusia [] manusia = new Manusia [4];
  
  //Perhatikan, anda bisa menyimpan subclass apa saja dari
  //tipe Manusia di dalam array Manusia.
  manusia[0] = new Siswa();
  manusia[1] = new Karyawan();
  manusia[2] = new Programmer();
  manusia[3] = new Professor();
  
  //Sekarang, ketika anda melakukan loop
  //terhadap array tersebut, dan memanggil method dari class Manusia
  //maka setiap objek akan melakukan hal yang benar atau
  //objek akan menggunakan method yang ada di classnya masing-masing!
  for (int i = 0; i < manusia.length; i++){
   manusia[i].makan();
   manusia[i].tidur();
   manusia[i].bergerak();
   System.out.println();
  }
  
 }

}


Output:

Siswa makan
Siswa tidur
Siswa bergerak

Karyawan makan
Karyawan tidur
Karyawan bergerak

Programmer makan
Programmer tidur
Programmer bergerak

Professor makan
Professor tidur
Professor bergerak

Perhatikanlah kekuatan polymorphism ini, hanya dengan sedikit kode, anda bisa melakukan banyak hal. Dan contoh di atas adalah merupakan array dari polymorphism.

Menggunakan Argumen Dan Tipe Return Polymorphic

Sesuai dengan pembahasan di atas, dengan polymorphism, anda bisa mendeklarasikan variabel referensi dari suatu super class, katakanlah class Manusia dan kemudian menetapkan objek dari sub class misalnya class Siswa pada variabel referensi tersebut.
Nah sekarang, apa yang terjadi jika variabel referensi itu adalah merupakan argumen dari suatu method?

Perhatikan contoh kode simpel di bawah ini:

//Superclass
public class Manusia {
 
 void berlari(){
  System.out.println("Manusia berlari");
 }

}


public class Siswa extends Manusia {
 
 @Override
 void berlari(){
  System.out.println("Siswa berlari");
 }
 
}


public class Karyawan extends Manusia {
 
 @Override
 void berlari(){
  System.out.println("Karyawan berlari");
 }

}



public class Programmer extends Manusia{
 
 @Override
 void berlari(){
  System.out.println("Programmer berlari");
 }

}


public class Professor extends Manusia {
 
 @Override
 void berlari(){
  System.out.println("Professor berlari");
 }

}


public class Beruang {
 
 /*
  Parameter Manusia dapat mengambil tipe Manusia apapun sebagai argumen.
  Dan ketika Beruang mengejar Manusia, maka akan memberi tahu Manusia agar berlari.
  */
 void mengejar (Manusia manusia){
  manusia.berlari();
 }

}


//Class Test untuk mendemonstrasikan polymorphism
public class Test {
 
 public static void main(String[] args) {
  
  Beruang beruang = new Beruang();
  
  Manusia [] manusia = new Manusia [4];
  manusia [0] = new Siswa();
  manusia [1] = new Karyawan();
  manusia [2] = new Programmer();
  manusia [3] = new Professor();
  
  System.out.println("Ketika beruang mengejar maka: " );
  
  for (int i = 0; i < manusia.length ; i++){
   /*
    Method beruang mengejar() dapat menerima argumen dari tipe Manusia.
    Selama objek yang anda pass-kan kedalam method tersebut inherit
    atau sub class dari Manusia, maka method ini akan bekerja.
    */
   beruang.mengejar(manusia[i]);
  }
 }
  

}

Output:
Ketika beruang mengejar maka:
Siswa berlari
Karyawan berlari
Programmer berlari
Professor berlari

Jadi, pada saat runtime, jika anda menulis kode menggunakan argumen polymorphic, di mana anda mendeklarasikan parameter pada method sebagai tipe super class, maka anda bisa mem-pass-kan setiap objek dari sub class pada method tersebut.

Share on Facebook
Share on Twitter
Share on Google+

Tempat berbagi pengetahuan untuk bahasa pemrograman Java

Related : Polymorphism Dalam Belajar Bahasa Pemrograman Java