Polimorfisme di Java (Statis dan Dinamis)

⚡ Ringkasan Cerdas

Polimorfisme di Java Memungkinkan satu antarmuka untuk mewakili banyak bentuk, sehingga nama metode tunggal berperilaku berbeda di berbagai kelas terkait. Ini adalah pilar desain berorientasi objek yang mendorong fleksibilitas, penggunaan kembali kode, dan perluasan yang bersih dari sistem perbankan, medis, dan perusahaan lama.

  • 🎭 Banyak bentuk, satu nama: Polimorfisme di Java Memungkinkan nama metode yang sama untuk dikirim ke implementasi yang berbeda berdasarkan tipe objek sebenarnya pada saat eksekusi.
  • 🔀 Dua rasa: Polimorfisme saat kompilasi menggunakan Method Overloading, sedangkan polimorfisme saat runtime menggunakan Method Overriding melalui pewarisan dan JVM.
  • Pengikatan statis vs dinamis: Panggilan yang kelebihan beban (overloaded calls) diselesaikan pada waktu kompilasi melalui pengikatan statis (Static binding), sedangkan panggilan yang ditimpa (overridden calls) diselesaikan pada waktu eksekusi (runtime) melalui pengikatan dinamis (Dynamic binding).
  • Kekuatan kata kunci super: Kata kunci super memungkinkan subkelas untuk memanggil implementasi induk sebelum menambahkan perilaku khusus miliknya sendiri di atasnya.
  • 🧪 Jangkauan di dunia nyata: Rekening bank, hierarki staf rumah sakit, dan mesin rendering bentuk semuanya bergantung pada polimorfisme untuk mengembangkan kebutuhan baru tanpa merusak kode yang telah diuji.

Polimorfisme di Java

Apa yang dimaksud dengan Polimorfisme Java?

Polimorfisme di Java Terjadi ketika satu atau lebih kelas atau objek saling terkait melalui pewarisan. Ini adalah kemampuan suatu objek untuk mengambil banyak bentuk. Pewarisan memungkinkan pengguna untuk mewarisi atribut dan metode, dan Polimorfisme menggunakan metode-metode ini untuk melakukan berbagai tugas. Tujuannya adalah komunikasi, sementara pendekatannya mungkin berbeda.

Sebagai contoh, ponsel pintar digunakan untuk berkomunikasi. Mode komunikasinya bisa berupa panggilan, pesan teks, pesan gambar, atau email. Tujuannya sama, yaitu komunikasi, tetapi pendekatannya berbeda. Perilaku inilah yang menjadi inti dari PolimorfismeSekarang kita akan mempelajari Polimorfisme di Java dengan contoh kode, diagram, dan penjelasan langkah demi langkah.

Klik di sini jika video tidak dapat diakses

Mengapa Menggunakan Polimorfisme dalam Java?

Polimorfisme di Java Pola ini digunakan karena membuat kode menjadi fleksibel, dapat digunakan kembali, dan lebih mudah dipelihara. Sebuah variabel referensi tunggal dari tipe induk dapat menunjuk ke beberapa objek anak, sehingga panggilan yang sama beradaptasi dengan subkelas mana pun yang diberikan. Pola ini menjaga kode yang telah diuji tetap utuh sementara perilaku baru ditambahkan melalui subkelas khusus, dan itulah mengapa kerangka kerja seperti Spring dan Jakarta EE bergantung padanya.

Java Polimorfisme dalam OOP dengan Contoh

Pertimbangkan satu kelas induk bernama Akun dengan fungsi untuk penyetoran dan penarikan. Kelas Account memiliki dua kelas turunan. Operasi penyetoran dan penarikan sama untuk rekening Tabungan dan Giro, sehingga metode yang diwarisi dari kelas Account akan berfungsi.

Warisan Tunggal di Java

Java Contoh Polimorfisme

Perubahan Persyaratan Perangkat Lunak

Terdapat perubahan dalam spesifikasi persyaratan, sesuatu yang umum terjadi di industri perangkat lunak. Fungsionalitas untuk Rekening Perbankan Istimewa dengan Fasilitas Cerukan harus ditambahkan. Cerukan adalah fasilitas di mana nasabah dapat menarik sejumlah uang yang lebih besar dari saldo yang tersedia di rekening. Metode penarikan untuk rekening istimewa membutuhkan implementasi baru, sementara kode yang telah diuji pada rekening Tabungan dan Giro dibiarkan tidak berubah. Isolasi tersebut merupakan keuntungan dari OOPS.

Java Polimorfisme

Langkah 1) Ketika metode penarikan untuk rekening Tabungan dipanggil, metode yang didefinisikan dalam kelas induk Account akan dieksekusi.

Java Polimorfisme

Langkah 2) Ketika metode penarikan untuk akun istimewa (fasilitas cerukan) dipanggil, metode penarikan yang didefinisikan dalam kelas istimewa akan dieksekusi. Pengiriman ini adalah Polimorfisme dalam OOP.

Java Polimorfisme

Metode Mengesampingkan di Java

Method Overriding adalah proses mendefinisikan ulang metode superclass di dalam subclass. Subclass tetap mempertahankan konsep yang sama.tract, tetapi menyediakan implementasi baru yang dipilih saat program dijalankan.

Aturan untuk Penggantian Metode

  • Tanda tangan metode, yaitu nama metode, daftar parameter, dan tipe kembalian, harus sama persis.
  • Metode yang ditimpa dapat memperluas aksesibilitas, tetapi tidak dapat mempersempitnya. Jika metode tersebut bersifat privat di kelas dasar, kelas turunan dapat membuatnya 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 Method Overloading dan Method Overriding

Method Overloading terjadi di dalam kelas yang sama dengan nama metode yang sama tetapi tanda tangan yang berbeda. Method Overriding terjadi di antara hubungan kelas induk-anak, di mana kelas turunan mendefinisikan ulang metode yang dideklarasikan di kelas induk.

Metode Overloading
Metode Override
Method overloading terjadi dalam kelas yang sama, di mana lebih dari satu metode memiliki nama yang sama tetapi tanda tangan (signature) yang berbeda. Method Overriding terjadi ketika salah satu metode dalam superclass didefinisikan ulang dalam subclass. Dalam hal ini, tanda tangan metode 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 kelas induk dan kelas turunan. Pemanggilan ke metode yang ditimpa diselesaikan pada saat runtime melalui pengikatan dinamis di dalam JVM.

Contoh Polimorfisme Dinamis

Variabel referensi dari superkelas dapat merujuk ke objek subkelas:

 Doctor obj = new Surgeon();

Perhatikan pernyataan berikut:

obj.treatPatient();

Di sini variabel referensi obj merupakan bagian dari kelas induk, tetapi objek yang ditunjuknya merupakan bagian dari kelas anak, seperti yang ditunjukkan pada diagram Polimorfisme.

Panggilan obj.treatPatient() akan mengeksekusi metode treatPatient() dari subkelas Surgeon. Ketika referensi kelas dasar digunakan untuk memanggil suatu metode, metode yang dipanggil ditentukan oleh JVM berdasarkan objek aktual yang ditunjuk oleh referensi tersebut. Meskipun demikian obj adalah referensi ke Dokter, ia memanggil metode Ahli Bedah, karena menunjuk ke objek Ahli Bedah. Keputusan dibuat selama runtime, itulah sebabnya disebut demikian. Polimorfisme Dinamis atau polimorfisme saat runtime.

Perbedaan Antara Polimorfisme Statis dan Dinamis

Polimorfisme Statis di Java Polimorfisme berbasis `Data` adalah jenis polimorfisme yang mengumpulkan informasi untuk memanggil suatu metode pada waktu kompilasi, sedangkan Polimorfisme Dinamis adalah jenis polimorfisme yang mengumpulkan informasi untuk memanggil suatu metode pada waktu eksekusi.

Polimorfisme Statis
Polimorfisme Dinamis
Ini berkaitan dengan Method Overloading. Ini berkaitan dengan Penggantian Metode (Method Overriding).
Kesalahan, jika ada, akan diselesaikan pada saat kompilasi. Karena kode tidak dieksekusi selama kompilasi, namanya bersifat statis.

Ex:

void sum (int a , int b);
void sum (float a, double b);
int sum (int a, int b); //compiler gives error.
Ketika variabel referensi memanggil metode yang ditimpa, metode yang akan dipanggil ditentukan oleh objek yang ditunjuk oleh variabel referensi tersebut. Hal ini hanya dapat ditentukan pada saat runtime ketika kode sedang dieksekusi, itulah sebabnya namanya 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 melakukan perilaku spesifiknya sendiri? Dalam hal ini, kata kunci super dapat 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 anggota data atau metode apa pun dari kelas induk di dalam kelas turunan. Selanjutnya, kita akan mempelajari tentang kata kunci `super`. Warisan, dan Polimorfisme dalam Java dengan contoh program.

Contoh: Untuk mempelajari Pewarisan, Polimorfisme, dan 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(){
            // overridden 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, dan jalankan kode tersebut. Amati hasilnya.

Langkah 3) Hapus tanda komentar pada baris 6 hingga 9. Simpan, kompilasi, dan jalankan kode. Amati hasilnya.

Langkah 4) Hapus tanda komentar pada baris 10. Simpan dan kompilasi kode.

Langkah 5) Kesalahan = ? Ini karena subkelas tidak dapat mengakses anggota privat dari superkelas.

Pertanyaan Umum Demo Slot

Polimorfisme di Java OOP adalah kemampuan suatu objek untuk mengambil banyak bentuk. Nama metode yang sama dapat menjalankan kode yang berbeda tergantung pada objek subkelas mana yang dirujuk saat runtime, yang merupakan perilaku inti dari OOP.

Java Mendukung polimorfisme saat kompilasi melalui Method Overloading dan polimorfisme saat runtime melalui Method Overriding. Overloading diselesaikan pada waktu kompilasi melalui pengikatan statis, sedangkan Overriding diselesaikan pada waktu runtime melalui pengikatan dinamis yang ditangani oleh JVM.

Pengikatan statis menghubungkan panggilan metode ke definisinya pada waktu kompilasi dan digunakan untuk Overloading Metode. Pengikatan dinamis menghubungkan panggilan pada waktu eksekusi berdasarkan tipe objek sebenarnya dan memungkinkan Penggantian Metode. Java.

Kata kunci `super` memungkinkan subkelas untuk memanggil metode yang ditimpa atau mengakses anggota data dari kelas induknya. Hal ini memungkinkan kelas anak untuk menggunakan kembali logika kelas induk dan kemudian menambahkan perilaku khusus di atasnya.

Tutor AI seperti ChatGPT dan GitHub Copilot Chat dapat menjelaskan Polimorfisme dalam Java Dengan analogi khusus, hasilkan soal latihan, telusuri pohon pewarisan, dan uji peserta didik tentang pengikatan statis versus pengikatan dinamis untuk penguasaan yang lebih cepat.

Ya. Asisten refactoring berbasis AI seperti Cursor, Sourcegraph Cody, dan IntelliJ AI Assistant dapat mendeteksi kondisi yang duplikat, menyarankan hierarki kelas, dan menulis ulang kode lama. Java kode sedemikian rupa sehingga Method Overriding menggantikan rangkaian if-else yang berulang.

Ringkaslah postingan ini dengan: