Polimorfisme di Java (Statis dan Dinamis)

Apa yang dimaksud dengan Polimorfisme Java?

Polimorfisme in Java terjadi ketika ada satu atau lebih kelas atau objek yang terkait satu sama lain melalui pewarisan. Ini adalah kemampuan suatu objek untuk mengambil berbagai bentuk. Warisan memungkinkan pengguna mewarisi atribut dan metode, dan polimorfisme menggunakan metode ini untuk melakukan tugas yang berbeda. Jadi tujuannya komunikasi, tapi pendekatannya berbeda.

Misalnya, Anda memiliki telepon pintar untuk berkomunikasi. Mode komunikasi yang Anda pilih bisa berupa apa saja. Bisa berupa panggilan, pesan teks, pesan gambar, surat, dan lain-lain. Jadi, tujuannya sama, yaitu komunikasi, tetapi pendekatannya berbeda. Ini disebut Polimorfisme. Sekarang kita akan mempelajari Polimorfisme Java dengan contoh.

Klik di sini jika video tidak dapat diakses

Java Polimorfisme dalam OOP dengan Contoh

Kita memiliki satu kelas induk, 'Akun' dengan fungsi penyetoran dan penarikan. Akun memiliki 2 kelas anak. Operasi penyetoran dan penarikan sama untuk akun Tabungan dan Giro. Jadi metode yang diwarisi dari kelas Akun akan berfungsi.

Warisan Tunggal di Java
Java Contoh Polimorfisme

Perubahan Persyaratan Perangkat Lunak

Ada perubahan dalam spesifikasi persyaratan, sesuatu yang sangat umum dalam industri perangkat lunak. Anda seharusnya menambahkan fungsionalitas Rekening Perbankan Istimewa dengan Fasilitas Cerukan. Sebagai latar belakang, cerukan adalah fasilitas tempat Anda dapat menarik jumlah yang lebih besar dari saldo yang tersedia di rekening Anda. Jadi, metode penarikan untuk istimewa perlu diterapkan lagi. Namun Anda tidak mengubah bagian kode yang diuji di rekening Tabungan dan Giro. Ini adalah keuntungan dari OOPS

Java Polimorfisme

Langkah 1) Sehingga ketika metode “ditarik” untuk rekening tabungan dipanggil, metode dari kelas akun induk akan dieksekusi

Java Polimorfisme

Langkah 2) Tetapi ketika metode “Penarikan” untuk akun yang memiliki hak istimewa (fasilitas cerukan) dipanggil, metode penarikan yang ditentukan dalam kelas hak istimewa akan dijalankan. Ini Polimorfisme di OOP.

Java Polimorfisme

Metode Mengesampingkan di Java

Method Overriding adalah mendefinisikan ulang metode kelas super dalam subkelas.

Aturan untuk Penggantian Metode

  • Tanda tangan metode, yaitu nama metode, daftar parameter, dan tipe kembalian harus sama persis.
  • Metode override dapat memperluas aksesibilitas tetapi tidak mempersempitnya, yaitu jika bersifat privat di kelas dasar, kelas anak dapat menjadikannya publik tetapi tidak sebaliknya.

Aturan untuk Metode Overriding di Java

Example

class Doctor{
  public void treatPatient(){
  // treatPatient method
  
}
class Surgeon extends Doctor{
  public void treatPatient(){
  // treatPatient method
  }
}
Class run{
  public static void main (String args[]){
    Doctor doctorObj = new Doctor()
	// treatPatient method in class Doctor will be executed
    doctorObj.treatPatient();
   
    Surgeon surgeonObj = new Surgeon();
    // treatPatient  method in class Surgeon  will be executed
    surgeonObj.treatPatient();
  }
}

Perbedaan antara Overloading dan Overriding

Metode Overloading
Metode Override
Metode yang kelebihan beban berada dalam kelas yang sama, dimana lebih dari satu metode mempunyai nama yang sama tetapi tanda tangannya berbeda. Penggantian metode adalah ketika salah satu metode di kelas super didefinisikan ulang di subkelas. Dalam hal ini, tanda tangan metodenya tetap sama.
Ex:

void sum (int a , int b);
void sum (int a , int b, int c);
void sum (float a, double b);
Ex:

class X{
  public int sum(){
     // some code
  }
}
class Y extends X{
  public int sum(){
    //overridden method
   //signature is same
 }
}

Apa itu Polimorfisme Dinamis?

Polimorfisme Dinamis dalam OOP adalah mekanisme di mana beberapa metode dapat didefinisikan dengan nama dan tanda tangan yang sama di superkelas dan subkelas. Panggilan ke metode yang diganti diselesaikan pada saat run time.

Contoh Polimorfisme Dinamis:

Variabel referensi dari kelas super dapat merujuk ke objek subkelas

 Doctor obj = new Surgeon();

Perhatikan pernyataan tersebut

obj.treatPatient();

Di sini variabel referensi “obj” adalah kelas induk, tetapi objek yang ditunjuknya adalah kelas anak (seperti yang ditunjukkan pada contoh diagram Polimorfisme di bawah).

obj.treatPatient() akan mengeksekusi metode treatPatient() dari subkelas – Surgeon

Jika referensi kelas dasar digunakan untuk memanggil suatu metode, metode yang akan dipanggil ditentukan oleh JVM, bergantung pada objek yang ditunjuk oleh referensi tersebut.

Misalnya, meskipun obj adalah referensi ke Doctor, ia memanggil metode Surgeon, karena ia menunjuk ke objek Surgeon

Ini diputuskan pada saat run-time dan karenanya disebut dinamis or polimorfisme run-time

Perbedaan antara Polimorfisme Statis & Dinamis

Polimorfisme Statis di Java adalah jenis polimorfisme yang mengumpulkan informasi untuk memanggil metode pada waktu kompilasi, sedangkan Polimorfisme Dinamis adalah jenis polimorfisme yang mengumpulkan informasi untuk memanggil metode pada waktu proses.

Polimorfisme Statis
Polimorfisme Dinamis
Ini berkaitan dengan kelebihan metode. Ini berkaitan dengan penggantian metode.
Kesalahan, jika ada, diselesaikan pada waktu kompilasi. Karena kode tidak dieksekusi selama kompilasi, maka dinamakan static.

Ex:

void sum (int a , int b);
void sum (float a, double b);
int sum (int a, int b); //compiler gives error.

Jika variabel referensi memanggil metode yang diganti, metode yang akan dipanggil ditentukan oleh objek yang ditunjuk oleh variabel referensi Anda. Ini hanya dapat ditentukan pada saat runtime ketika kode sedang dieksekusi, oleh karena itu dinamakan dinamis.

Ex:

//reference of parent pointing to child object
 Doctor obj = new Surgeon();
// method of child called
obj.treatPatient();

Kata Kunci Super masuk Java

Bagaimana jika metode treatPatient di kelas Surgeon ingin menjalankan fungsi yang didefinisikan di kelas Doctor dan kemudian menjalankan fungsi spesifiknya sendiri? Dalam kasus ini, kata kunci superdapat digunakan untuk mengakses metode kelas induk dari kelas anak. Metode treatPatient di kelas Surgeon dapat ditulis sebagai:

treatPatient(){
   super.treatPatient();
     //add code specific to Surgeon
}

Kata kunci super dapat digunakan untuk mengakses data anggota atau metode kelas super apa pun di subkelas.

Selanjutnya kita akan belajar tentang kata kunci Super, Warisan dan Polimorfisme di Java dengan contoh program.

Contoh:-Untuk mempelajari Warisan, Polimorfisme & kata kunci super

Langkah 1) Salin kode berikut ke Editor

public class Test{
     public static void main(String args[]){
        X x= new X();
       Y y = new  Y();
       y.m2();
      //x.m1();
      //y.m1();
     //x = y;// parent pointing to object of child
     //x.m1() ;
     //y.a=10;
   }
}
class X{
   private int a;
   int b;
      public void m1(){
       System.out.println("This is method m1 of class X");
     }
}
class Y extends X{
      int c; // new instance variable of class Y
         public void m1(){
            // overriden method
            System.out.println("This is method m1 of class Y");
        }
       public void m2(){
           super.m1();
           System.out.println("This is method m2 of class Y");
      }
}

Langkah 2) Simpan, Kompilasi & Jalankan kode. Amati hasilnya.

Langkah 3) Batalkan komentar pada baris # 6-9. Simpan, Kompilasi & Jalankan kode. Amati hasilnya.

Langkah 4) Batalkan komentar pada baris #10 . Simpan & Kompilasi kodenya.

Langkah 5) Kesalahan = ? Hal ini karena sub-kelas tidak dapat mengakses anggota privat dari kelas super.

Ringkasan

  • Polimorfisme dalam Pemrograman Berorientasi Objek terjadi ketika ada satu atau lebih kelas atau objek yang terkait satu sama lain melalui pewarisan. Ini adalah kemampuan suatu objek untuk mengambil berbagai bentuk.
  • Method Overriding adalah mendefinisikan ulang metode kelas super dalam subkelas.
  • Polimorfisme Dinamis di Java adalah mekanisme di mana beberapa metode dapat didefinisikan dengan nama dan tanda tangan yang sama di superkelas dan subkelas.
  • Polimorfisme Statis di Java adalah jenis polimorfisme yang mengumpulkan informasi untuk memanggil metode pada waktu kompilasi, sedangkan Polimorfisme Dinamis adalah jenis polimorfisme yang mengumpulkan informasi untuk memanggil metode pada waktu proses.
  • Kata kunci super dapat digunakan untuk mengakses metode kelas induk dari kelas anak.

Ringkaslah postingan ini dengan: