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.
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.
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.
Langkah 1) Ketika metode penarikan untuk rekening Tabungan dipanggil, metode yang didefinisikan dalam kelas induk Account akan dieksekusi.
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.
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.
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.
| 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.
| 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.






