Direkomendasikan, 2024

Pilihan Editor

Perbedaan Antara Warisan dan Polimorfisme

Warisan memungkinkan, penggunaan kembali kode dan polimorfisme adalah, terjadinya satu fungsi dengan bentuk yang berbeda. Perbedaan mendasar antara pewarisan dan polimorfisme adalah bahwa pewarisan memungkinkan kode yang sudah ada untuk digunakan kembali dalam suatu program, dan polimorfisme menyediakan mekanisme untuk secara dinamis memutuskan bentuk fungsi apa yang akan dipanggil.

Grafik perbandingan

Dasar untuk PerbandinganWarisanPolimorfisme
DasarInheritance membuat kelas baru menggunakan properti dari kelas yang sudah ada.Polimorfisme pada dasarnya adalah antarmuka umum untuk berbagai bentuk.
PelaksanaanWarisan pada dasarnya diterapkan pada kelas-kelas.Polimorfisme pada dasarnya diimplementasikan pada fungsi / metode.
MenggunakanUntuk mendukung konsep usabilitas dalam OOP dan mengurangi panjang kode.Mengizinkan objek menentukan bentuk fungsi mana yang akan dipanggil saat, pada waktu kompilasi (overloading) serta run time (overriding).
FormulirPewarisan dapat berupa pewarisan tunggal, pewarisan berganda, pewarisan multilevel, pewarisan hierarkis, dan pewarisan hibrida.Polimorfisme dapat berupa polimorfisme waktu kompilasi (overloading) atau run-time polimorfisme (penggantian).
Contoh'Meja' kelas dapat mewarisi fitur 'furnitur' kelas, karena 'meja' adalah 'furnitur'.Kelas 'study_table' juga dapat memiliki fungsi 'set_color ()' dan kelas 'Dining_table' juga dapat memiliki fungsi 'set_color ()' jadi, bentuk fungsi set_color () yang dipanggil dapat diputuskan pada keduanya, waktu kompilasi dan waktu berjalan.

Definisi Warisan:

Warisan adalah salah satu fitur penting dari OOP, yang sangat mendukung "reusability". Dapat digunakan kembali dapat digambarkan sebagai membuat kelas baru dengan menggunakan kembali properti dari kelas yang ada. Dalam pewarisan, ada kelas dasar, yang diwarisi oleh kelas turunan. Ketika kelas mewarisi kelas lain, anggota kelas dasar menjadi anggota kelas turunan.

Bentuk umum mewarisi kelas adalah sebagai berikut:

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

Di sini, penentu akses menyediakan mode akses (pribadi, publik, dilindungi) ke anggota di kelas dasar ke kelas turunan. Jika tidak ada specifier akses, secara default, dianggap sebagai "pribadi". Dalam C ++, jika kelas yang diturunkan adalah "struct" maka penspesifikasi akses adalah "publik" secara default.

Dalam C ++, warisan dapat dicapai dalam lima bentuk. Mereka dapat diklasifikasikan sebagai: -

  • Warisan Tunggal (hanya satu kelas super)
  • Multiple Inheritance (beberapa superclasses)
  • Hierarchical Inheritance (satu kelas super, banyak subclass)
  • Multiple Inheritance (berasal dari kelas turunan)

Di Jawa, kelas mewarisi kelas lain dengan menggunakan kata kunci "extends". Di Jawa, kelas dasar disebut sebagai kelas super, dan kelas turunan disebut sebagai subkelas. Subclass tidak dapat mengakses anggota kelas dasar tersebut, yang dinyatakan sebagai "pribadi". Bentuk umum yang mewarisi kelas di Jawa adalah sebagai berikut.

 class diturunkan-nama-kelas meluas basis-nama-kelas {// body of the class}; 

Java tidak mendukung pewarisan multiple inheritance, sedangkan Java mendukung hierarki bertingkat. Di Jawa, kadang-kadang kelas super mungkin ingin menyembunyikan detail implementasinya, dan itu membuat beberapa bagian dari data itu “pribadi”. Seperti di Jawa, subclass tidak dapat mengakses anggota pribadi dari superclass dan jika subclass ingin mengakses atau menginisialisasi anggota tersebut, maka Java memberikan solusi. Subclass dapat merujuk anggota superclass langsungnya dengan menggunakan kata kunci "super". Ingat, Anda hanya dapat mengakses anggota superclass langsung.

'Super' memiliki dua bentuk umum. Yang pertama adalah, digunakan untuk memanggil konstruktor kelas super. Yang kedua adalah, untuk mengakses anggota superclass yang telah disembunyikan oleh anggota subclass.

 // bentuk pertama memanggil konstruktor. class supper_class {supper_class (argumen_list) {..} // konstruktor super class}; kelas sub_class meluas supper_class {sub_class (argumen_list) {..} // konstruktor dari sub_class super (argument_list); // sub_class memanggil konstruktor kelas super}}; 
 // kedua untuk dari 'super' class supper_class {int i; } kelas sub_class meluas supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' dari kelas super i = b; // 'i' dari sub kelas}}; 

Definisi Polimorfisme

Istilah polimorfisme berarti 'satu fungsi, berbagai bentuk'. Polimorfisme dicapai pada waktu kompilasi dan waktu lari. Polymorphism waktu kompilasi dicapai melalui "overloading" sedangkan, polimorfisme run time dicapai melalui "overriding".

Polimorfisme memungkinkan objek untuk memutuskan "bentuk fungsi mana yang dipanggil ketika" pada keduanya, mengkompilasi waktu dan menjalankan waktu.
Mari kita bahas konsep pertama overloading. Dalam overloading, kami mendefinisikan fungsi di kelas lebih dari satu kali dengan tipe data yang berbeda, dan jumlah parameter sedangkan fungsi yang akan kelebihan beban harus memiliki tipe pengembalian yang sama. Sebagian besar fungsi untuk overload adalah konstruktor dari kelas.

 class overload {int a, b; publik: int overload (int x) {// first overload () konstruktor a = x; mengembalikan a; } int overload (int x, int y) {// overload kedua () konstruktor a = x; b = y; kembalikan a * b; }}; int main () {overload O1; O1.overload (20); // overload pertama () panggilan konstruktor O1.overload (20, 40); // overload kedua () panggilan konstruktor} 

Sekarang, mari kita bahas bentuk kedua polimorfisme, yaitu mengesampingkan. Konsep pengesampingan hanya dapat diimplementasikan ke fungsi kelas yang juga menerapkan konsep pewarisan. Dalam C ++, fungsi yang akan ditimpa diawali dengan kata kunci "virtual" di kelas dasar dan didefinisikan ulang di kelas turunan dengan prototipe yang sama kecuali kata kunci "virtual".

 basis kelas {publik: virtual void funct () {// fungsi virtual cout kelas dasar << "Ini adalah fungsi kelas dasar ()"; }}; class deriv1: public base {public: void funct () {// fungsi virtual dari kelas dasar didefinisikan ulang dalam cout class diturunkan1 

Perbedaan Kunci Antara Warisan dan Polimorfisme

  1. Inheritance adalah membuat kelas yang memperoleh fiturnya dari kelas yang sudah ada. Di sisi lain, polimorfisme adalah antarmuka yang dapat didefinisikan dalam berbagai bentuk.
  2. Warisan diimplementasikan pada kelas sedangkan polimorfisme diimplementasikan pada metode / fungsi.
  3. Karena pewarisan memungkinkan kelas turunan untuk menggunakan elemen dan metode yang didefinisikan dalam kelas dasar, kelas turunan tidak perlu mendefinisikan elemen-elemen atau metode itu lagi sehingga, kita dapat mengatakan itu meningkatkan penggunaan kembali kode dan karenanya, mengurangi panjang kode . Di sisi lain, polimorfisme memungkinkan objek untuk memutuskan bentuk metode apa yang ingin digunakan pada waktu kompilasi dan waktu lari.
  4. Warisan dapat digolongkan sebagai pewarisan tunggal, pewarisan berganda, pewarisan multilevel, pewarisan hierarkis, dan pewarisan hibrida. Di sisi lain, polimorfisme diklasifikasikan sebagai overloading dan overriding.

Kesimpulan:

Warisan dan polimorfisme adalah konsep yang saling terkait, karena polimorfisme dinamis berlaku untuk kelas-kelas yang juga menerapkan konsep pewarisan.

Top