Apa itu Polimorfisme di Jawa?
Polimorfisme di Jawa terjadi ketika ada satu atau lebih kelas atau objek yang terkait satu sama lain melalui pewarisan. Dengan kata lain, itu adalah kemampuan suatu objek untuk mengambil banyak bentuk. Pewarisan memungkinkan pengguna mewarisi atribut dan metode, dan polimorfisme menggunakan metode ini untuk melakukan tugas yang berbeda. Jadi tujuannya adalah komunikasi tetapi pendekatannya berbeda.
Misalnya, Anda memiliki smartphone untuk komunikasi. Mode komunikasi yang Anda pilih bisa apa saja. Bisa berupa telepon, SMS, pesan gambar, surat, dll. Jadi, tujuannya adalah komunikasi, tetapi pendekatannya berbeda. Ini disebut Polimorfisme.
Dalam tutorial ini, Anda akan belajar-
- Apa itu Polimorfisme?
- Polimorfisme Jawa dalam OOP dengan Contoh
- Metode Mengganti
- Perbedaan antara Overloading dan Overriding
- Apa itu Polimorfisme Dinamis?
- Kata Kunci Super
- Perbedaan antara Polimorfisme Statis & Dinamis
Klik di sini jika video tidak dapat diakses
Polimorfisme Jawa dalam OOP dengan Contoh
Kami memiliki satu kelas induk, 'Akun' dengan fungsi penyetoran dan penarikan. Akun memiliki 2 kelas anak Operasi penyetoran dan penarikan sama untuk rekening Tabungan dan Giro. Jadi metode yang diwariskan dari kelas Akun akan berfungsi.Perubahan Kebutuhan Perangkat Lunak
Ada perubahan spesifikasi persyaratan, sesuatu yang sangat umum di industri perangkat lunak. Anda diharapkan untuk menambah fungsionalitas Rekening Perbankan dengan Fasilitas Cerukan.
Sebagai latar belakang, cerukan adalah fasilitas di mana Anda dapat menarik jumlah lebih dari saldo yang tersedia di akun Anda.
Jadi, metode penarikan untuk kebutuhan istimewa untuk diimplementasikan lagi. Tetapi Anda tidak mengubah bagian kode yang diuji di rekening Tabungan dan Giro. Ini adalah keuntungan dari OOPS
Langkah 1) Sehingga ketika metode "ditarik" untuk tabungan disebut metode dari kelas akun induk dijalankan.
Langkah 2) Tetapi ketika metode "Penarikan" untuk akun yang memiliki hak istimewa (fasilitas cerukan) disebut metode penarikan yang ditentukan dalam kelas yang memiliki hak istimewa dijalankan. Ini adalah Polimorfisme.
Metode Mengganti
Metode Overriding adalah mendefinisikan kembali metode kelas super dalam sub kelas.
Aturan untuk Penggantian Metode
- Tanda tangan metode yaitu nama metode, daftar parameter dan tipe kembalian harus sama persis.
- Metode yang diganti dapat memperluas aksesibilitas tetapi tidak mempersempitnya, yaitu jika privat di kelas dasar, kelas anak dapat membuatnya menjadi publik tetapi tidak sebaliknya.
Contoh
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 executeddoctorObj.treatPatient();Surgeon surgeonObj = new Surgeon();// treatPatient method in class Surgeon will be executedsurgeonObj.treatPatient();}}
Perbedaan antara Overloading dan Overriding
Metode Overloading | Metode Mengganti |
---|---|
Metode overloading berada dalam kelas yang sama, di mana lebih dari satu metode memiliki nama yang sama tetapi tanda tangan berbeda. |
Penimpaan metode adalah ketika salah satu metode di kelas super didefinisikan ulang di sub-kelas. Dalam kasus ini, tanda tangan metode tersebut 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 adalah mekanisme di mana beberapa metode dapat didefinisikan dengan nama dan tanda tangan yang sama di superclass dan subclass. Panggilan ke metode yang diganti diselesaikan pada waktu proses.
Contoh Polimorfisme Dinamis:
Variabel referensi dari kelas super dapat merujuk ke objek sub kelas
Doctor obj = new Surgeon();
Perhatikan pernyataannya
obj.treatPatient();
Di sini variabel referensi "obj" adalah dari kelas induk, tetapi obyek yang dituju adalah dari kelas anak (seperti yang ditunjukkan pada diagram).
obj.treatPatient () akan mengeksekusi metode treatPatient () dari sub-kelas - Surgeon
Jika referensi kelas dasar digunakan untuk memanggil metode, metode yang akan dipanggil ditentukan oleh JVM, bergantung pada objek yang dirujuk referensi tersebut.
Misalnya, meskipun obj adalah referensi ke Dokter, ia memanggil metode Ahli Bedah, karena mengacu pada objek Ahli Bedah.
Ini diputuskan selama run-time dan karenanya disebut polimorfisme dinamis atau run-time
Kata Kunci Super
Bagaimana jika metode treatPatient di kelas Surgeon ingin menjalankan fungsionalitas yang ditentukan di kelas Doctor dan kemudian menjalankan fungsionalitas 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 setiap anggota data atau metode kelas super di sub kelas.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 Ypublic void m1(){// overriden methodSystem.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) Baris tanda komentar # 6-9. Simpan, Kompilasi & Jalankan kode. Amati hasilnya.
Langkah 4) Baris komentar # 10. Simpan & Kompilasi kode.
Langkah 5) Kesalahan =? Ini karena sub-kelas tidak dapat mengakses anggota pribadi dari kelas super.
Perbedaan antara Polimorfisme Statis & Dinamis
Polimorfisme Statis | Polimorfisme Dinamis |
---|---|
Ini berkaitan dengan metode overloading. | Ini berkaitan dengan penggantian metode. |
Kesalahan, jika ada, diselesaikan pada waktu kompilasi. Karena kode tidak dijalankan selama kompilasi, maka namanya statis. 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 saat runtime ketika kode sedang dijalankan, maka namanya dinamis. Ex: //reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient(); |