Disyorkan, 2024

Pilihan Editor

Perbezaan Antara Warisan dan Polimorfisme

Warisan membolehkan, kebolehkodalan kod dan polimorfisme adalah, berlakunya satu fungsi dengan bentuk yang berbeza. Perbezaan dasar antara pusaka dan polimorfisme adalah warisan yang membolehkan kod yang sedia ada digunakan semula dalam program, dan polimorfisme menyediakan mekanisme untuk menentukan secara dinamik bentuk fungsi apa yang akan digunakan.

Carta Perbandingan

Asas untuk PerbandinganWarisanPolimorfisme
AsasWarisan mencipta kelas baru menggunakan sifat-sifat kelas yang sudah ada.Polimorfisme pada dasarnya adalah antara muka umum untuk pelbagai bentuk.
PelaksanaanInheritance pada asasnya dilaksanakan pada kelas.Polimorfisme pada asasnya dilaksanakan pada fungsi / kaedah.
GunaUntuk menyokong konsep kebolehgunaan semula dalam OOP dan mengurangkan panjang kod.Membenarkan objek untuk menentukan bentuk fungsi mana yang akan digunakan apabila, pada masa penyusunan (beban muatan) serta jangka masa (overriding).
BorangWarisan mungkin warisan tunggal, warisan berganda, warisan bertingkat, warisan hierarki dan warisan hibrid.Polimorfisme mungkin merupakan polimorfisme masa kompilasi (overloading) atau polymorphism run-time (overriding).
ContohJadual 'kelas' boleh mewarisi ciri perabot kelas ', sebagai' meja 'adalah' perabot '.Kelas 'study_table' juga boleh mempunyai fungsi 'set_color ()' dan kelas 'Dining_table' juga boleh mempunyai fungsi 'set_color ()' jadi, bentuk fungsi set_color () untuk dimohon dapat diputuskan pada kedua-duanya, jangka masa.

Definisi Warisan:

Warisan adalah salah satu ciri penting OOP, yang sangat menyokong "kebolehgunaan semula". Reusability boleh digambarkan sebagai mencipta kelas baru dengan menggunakan semula sifat-sifat kelas sedia ada. Dalam warisan, terdapat kelas asas, yang diwarisi oleh kelas yang diturunkan. Apabila kelas mewarisi mana-mana kelas lain, ahli (s) kelas asas menjadi ahli (s) dari kelas yang diturunkan.

Bentuk umum mewarisi kelas adalah seperti berikut:

 class-derived class-name: access-specifier base-class-name {// body of the class}; 

Di sini, pengecualian akses menyediakan mod akses (swasta, awam, dilindungi) kepada ahli dalam kelas asas kepada kelas yang diperolehi. Sekiranya tiada penunjuk akses hadir, secara lalai, ia dianggap sebagai "peribadi". Dalam C ++, jika kelas yang diturunkan adalah "struct" maka penunjuk akses adalah "awam" secara lalai.

Di C ++, warisan boleh dicapai dalam lima bentuk. Mereka boleh dikelaskan sebagai: -

  • Warisan Tunggal (hanya satu kelas super)
  • Pewarisan Pelbagai (beberapa cermin mata hitam)
  • Warisan Hierarki (satu kelas super, banyak subkelas)
  • Warisan Pelbagai (berasal daripada kelas yang diturunkan)

Di Jawa, kelas mewarisi kelas yang lain dengan menggunakan kata kunci "meluas". Di Jawa, kelas asas dirujuk sebagai kelas super, dan kelas asal disebut sebagai subclass. Subclass tidak boleh mengakses ahli-ahli kelas asas, yang diisytiharkan sebagai "swasta". Bentuk umum mewarisi kelas di Jawa adalah seperti berikut.

 kelas bertaraf kelas yang diperolehi meluaskan asas kelas-kelas {/ body of the class}; 

Java tidak menyokong warisan warisan berganda, sedangkan ia menyokong hierarki multilevel. Di Jawa, kadang-kadang kelas super mungkin menyembunyikan butiran pelaksanaannya, dan ia menjadikan sebahagian daripada data itu "swasta". Seperti di Jawa, subclass tidak boleh mengakses ahli-ahli persendirian dari kelas superclass dan jika subclass ingin mengakses atau memulakannya, maka Java memberikan penyelesaian. Subclass boleh merujuk ahli superclass terdekat dengan menggunakan kata kunci "super". Ingat, anda hanya boleh mengakses ahli-ahli superclass segera.

'Super' mempunyai dua bentuk umum. Yang pertama, ia digunakan untuk memanggil pembina kelas super. Yang kedua adalah, untuk mengakses ahli superclass yang telah disembunyikan oleh ahli subkelas.

 // bentuk pertama memanggil pembina. kelas supper_class {supper_class (argument_list) {..} // constructor of super class}; kelas sub_class memanjangkan supper_class {sub_class (argument_list) {..} // constructor sub_class super (argument_list); // sub_class memanggil pembina kelas super}}; 
 // kedua untuk supper_class kelas 'super' {int i; } kelas sub_class memanjangkan supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' kelas super i = b; // 'i' subkelas}}; 

Definisi Polymorphism

Polimorfisme istilah hanya bermaksud 'satu fungsi, pelbagai bentuk'. Polimorfisme dicapai pada masa kompilasi dan jangka masa. Polymorphism masa kompilasi dicapai melalui "overloading" sedangkan, polimorfisme masa berjalan dicapai melalui "overriding".

Polimorfisme membenarkan objek untuk menentukan "bentuk fungsi yang akan digunakan apabila" pada kedua-duanya, menyusun masa dan jangka masa.
Mari kita bincangkan konsep overloading yang pertama. Dalam muatan yang lebih besar, kita menentukan fungsi dalam kelas lebih daripada satu kali dengan jenis data yang berbeza dan bilangan parameter manakala fungsi yang akan dibebankan mesti mempunyai jenis pulangan yang sama. Kebanyakan masa fungsi kepada kelebihan beban adalah pembina kelas.

 beban kelas {int a, b; awam: int overload (int x) {// first overload () constructor a = x; kembali; } int beban (int x, int y) {// kedua beban () pembina a = x; b = y; kembali a * b; }}; int main () {overload O1; O1.overload (20); / terlebih dahulu terlebih dahulu () pembina panggilan O1.overload (20, 40); // second load () constructor call} 

Sekarang, mari kita bincangkan bentuk kedua polimorfisme, iaitu mengatasi. Konsep mengatasi hanya boleh dilaksanakan untuk fungsi kelas yang juga melaksanakan konsep warisan. Dalam C ++, fungsi yang akan ditindih didahului oleh kata kunci "maya" dalam kelas asas dan ditakrifkan semula dalam kelas yang diturunkan dengan prototaip yang sama kecuali kata kunci "maya".

 class base {public: funct void virtual () {// function virtual cout class base << "This is a class base's ()"; }}; class derived1: public base {public: void funct () {// function virtual class base redefined in cout class derived1 

Perbezaan Utama Antara Warisan dan Polimorfisme

  1. Warisan mencipta kelas yang memperoleh ciri dari kelas yang sudah ada. Sebaliknya, polimorfisme adalah antara muka yang boleh ditakrifkan dalam pelbagai bentuk.
  2. Warisan dilaksanakan pada kelas sedangkan polimorfisme dilaksanakan pada kaedah / fungsi.
  3. Sebagai warisan membolehkan kelas yang diturunkan untuk menggunakan unsur-unsur dan kaedah-kaedah yang ditentukan dalam kelas asas, kelas yang diturunkan tidak perlu mentakrifkan unsur-unsur atau kaedah itu sekali lagi, kita boleh mengatakan ia meningkatkan kebolehgunaan semula kod dan oleh itu, mengurangkan panjang kod . Sebaliknya, polimorfisme menjadikan objek untuk menentukan bentuk bentuk kaedah yang hendak digunakan pada masa kompilasi dan waktu larian.
  4. Warisan boleh dikelaskan sebagai warisan tunggal, warisan berganda, warisan bertingkat, warisan hierarki dan warisan hibrid. Sebaliknya, polimorfisme diklasifikasikan sebagai muatan dan override.

Kesimpulan:

Inheritance dan polymorphism adalah konsep yang saling berkaitan, kerana polimorfisme dinamik diterapkan pada kelas yang juga melaksanakan konsep warisan.

Top