Polimorfisme di OOP Java dengan Contoh

Isi kandungan:

Anonim

Apa itu Polimorfisme di Jawa?

Polimorfisme di Jawa berlaku apabila terdapat satu atau lebih kelas atau objek yang saling berkaitan dengan warisan. Dengan kata lain, kemampuan suatu objek untuk mengambil banyak bentuk. Warisan membolehkan pengguna mewarisi atribut dan kaedah, dan polimorfisme menggunakan kaedah ini untuk melaksanakan tugas yang berbeza. Jadi, tujuannya adalah komunikasi tetapi pendekatannya berbeza.

Contohnya, anda mempunyai telefon pintar untuk komunikasi. Mod komunikasi yang anda pilih boleh menjadi apa sahaja. Ini dapat berupa panggilan, pesan teks, pesan gambar, surat, dll. Oleh itu, tujuannya adalah umum iaitu komunikasi, tetapi pendekatan mereka berbeza. Ini dipanggil Polimorfisme.

Dalam tutorial ini, anda akan belajar-

  • Apa itu Polimorfisme?
  • Polimorfisme Java dalam OOP dengan Contoh
  • Kaedah Mengatasi
  • Perbezaan antara Overloading dan Overriding
  • Apa itu Polimorfisme Dinamik?
  • Kata Kunci Super
  • Perbezaan antara Polimorfisme Statik & Dinamik

Klik di sini jika video tidak dapat diakses

Polimorfisme Java dalam OOP dengan Contoh

Kami mempunyai satu kelas induk, 'Akaun' dengan fungsi deposit dan pengeluaran. Akaun mempunyai 2 kelas anak Operasi deposit dan pengeluaran adalah sama untuk Menyimpan dan Menyemak akaun. Jadi kaedah yang diwarisi dari kelas Akaun akan berfungsi.

Perubahan Keperluan Perisian

Terdapat perubahan dalam spesifikasi keperluan, sesuatu yang sangat umum dalam industri perisian. Anda sepatutnya menambah fungsi Akaun Perbankan istimewa dengan Kemudahan Overdraf.

Untuk latar belakang, overdraf adalah kemudahan di mana anda boleh mengeluarkan jumlah yang lebih banyak daripada baki yang ada di akaun anda.

Oleh itu, tarik balik kaedah untuk keperluan istimewa yang akan dilaksanakan semula. Tetapi anda tidak mengubah sekeping kod yang diuji dalam akaun Simpanan dan Pemeriksaan. Ini adalah kelebihan OOPS

Langkah 1) Sehingga apabila kaedah "ditarik" untuk menyimpan akaun disebut kaedah dari kelas akaun induk dijalankan.

Langkah 2) Tetapi apabila kaedah "Penarikan" untuk akaun istimewa (kemudahan cerukan) disebut kaedah pengeluaran yang ditentukan dalam kelas istimewa dijalankan. Ini adalah Polimorfisme.

Kaedah Mengatasi

Kaedah Overriding adalah mentakrifkan semula kaedah kelas super dalam sub kelas.

Kaedah Mengatasi Kaedah

  • Tandatangan kaedah iaitu nama kaedah, senarai parameter dan jenis pengembalian harus sesuai dengan tepat.
  • Kaedah yang diganti boleh memperluas aksesibilitas tetapi tidak menyempitkannya, iaitu jika ia bersifat peribadi di kelas asas, kelas kanak-kanak dapat menjadikannya umum tetapi tidak sebaliknya.

Contohnya

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();}}

Perbezaan antara Overloading dan Overriding

Kaedah Membebankan Kaedah Mengatasi

Overloading kaedah berada di kelas yang sama, di mana lebih daripada satu kaedah mempunyai nama yang sama tetapi tandatangan yang berbeza.

Penggantian kaedah adalah apabila salah satu kaedah di kelas super ditakrifkan semula dalam sub-kelas. Dalam kes ini, tandatangan kaedahnya tetap sama.

Cth:

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

Cth:

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

Apa itu Polimorfisme Dinamik?

Polimorfisme Dinamik adalah mekanisme di mana pelbagai kaedah dapat didefinisikan dengan nama dan tanda tangan yang sama dalam superclass dan subkelas. Panggilan ke kaedah yang diganti diselesaikan pada masa berjalan.

Polimorfisme Dinamik Contoh:

Pemboleh ubah rujukan kelas super boleh merujuk kepada objek kelas bawah

Doctor obj = new Surgeon();

Pertimbangkan penyataannya

obj.treatPatient();

Di sini pemboleh ubah rujukan "obj" adalah dari kelas induk, tetapi objek yang ditunjuknya adalah dari kelas anak (seperti yang ditunjukkan dalam rajah).


obj.treatPatient () akan melaksanakan kaedah treatPatient () sub-kelas - Pakar Bedah

Jika rujukan kelas dasar digunakan untuk memanggil metode, metode yang akan diputuskan ditentukan oleh JVM, bergantung pada objek yang ditunjuk oleh rujukan

Sebagai contoh, walaupun obj adalah rujukan kepada Doktor, ia memanggil kaedah Pakar Bedah, kerana menunjuk ke objek Pakar Bedah

Ini diputuskan semasa jangka masa berjalan dan oleh itu disebut polimorfisme dinamik atau masa berjalan

Kata Kunci Super

Bagaimana jika kaedah treatPatient di kelas Pakar Bedah ingin melaksanakan fungsi yang ditentukan dalam kelas Doktor dan kemudian melakukan fungsi khusus sendiri?
Dalam kes ini, kata kunci

superboleh digunakan untuk mengakses kaedah kelas induk dari kelas anak.
Kaedah treatPatient di kelas Surgeon boleh ditulis sebagai:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

Kata kunci super boleh digunakan untuk mengakses mana-mana ahli data atau kaedah kelas super di kelas bawah.Contoh: -Untuk mempelajari Warisan, Polimorfisme & kata kunci super

Langkah 1) Salin kod berikut ke dalam 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, Susun & Jalankan kodnya. Perhatikan output.
Langkah 3) Garis uncomments # 6-9. Simpan, Susun & Jalankan kod. Perhatikan output.
Langkah 4) Garis ketidakpuasan # 10. Simpan & Susun kodnya.
Langkah 5) Ralat =? Ini kerana sub-kelas tidak dapat mengakses ahli peribadi kelas super.

Perbezaan antara Polimorfisme Statik & Dinamik

Polimorfisme Statik Polimorfisme Dinamik
Ia berkaitan dengan kaedah overloading. Ia berkaitan dengan kaedah overriding.

Kesalahan, jika ada, diselesaikan pada waktu kompilasi. Oleh kerana kod tersebut tidak dijalankan selama penyusunan, maka namanya statis.

Cth:

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

Sekiranya pemboleh ubah rujukan memanggil kaedah yang diganti, kaedah yang akan digunakan ditentukan oleh objek, pemboleh ubah rujukan anda menunjuk. Ini hanya dapat ditentukan pada waktu runtime ketika kod dalam pelaksanaan, maka namanya dinamis.

Cth:

//reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient();