Diagramă de comparație
Bazele comparației | Moştenire | polimorfismul |
---|---|---|
De bază | Moștenirea creează o nouă clasă utilizând proprietățile clasei deja existente. | Polimorfismul este în principiu o interfață comună pentru forma multiplă. |
Punerea în aplicare | Moștenirea este pusă în practică pe clase. | Polimorfismul este în principiu implementat pe funcție / metode. |
Utilizare | Pentru a susține conceptul de reutilizare în PLO și reduce lungimea codului. | Permite obiectului să decidă ce formă a funcției să fie invocată când, la momentul compilării (supraîncărcare), precum și timpul de execuție (overriding). |
Formulare | Moștenirea poate fi o singură moștenire, moștenire multiplă, moștenire pe mai multe niveluri, moștenire ierarhică și moștenire hibridă. | Polimorfismul poate fi un polimorfism de compilare a timpului (supraîncărcare) sau polimorfism de execuție (depășire). |
Exemplu | Clasa "tabel" poate moșteni caracteristica "mobilierului" de clasă, deoarece "tabelul" este un "mobilier". | De asemenea, clasa 'study_table' poate avea funcția 'set_color ()', iar o clasă 'Dining_table' poate avea și funcția 'set_color ()', care formă a funcției set_color run time. |
Definiția Inheritance:
Moștenirea este una dintre trăsăturile esențiale ale POR, care susțin puternic "reutilizarea". Reutilizabilitatea ar putea fi descrisă ca crearea unei noi clase prin reutilizarea proprietăților clasei existente. În moștenire, există o clasă de bază, care este moștenită de clasa derivată. Atunci când o clasă moștenește orice altă clasă, membrii clasei de bază devin membrii unei clase derivate.
Forma generală de moștenire a unei clase este după cum urmează:
class derived-class-name: acces-specifier bază-clasă-nume {// corp al clasei};
Aici, specificatorul de acces oferă modul de acces (privat, public, protejat) pentru membrii din clasa de bază la clasa derivată. Dacă nu există niciun specificator de acces, în mod implicit, acesta este considerat "privat". În C ++, dacă clasa derivată este "struct" atunci specificatorul de acces este implicit "public".
În C ++, moștenirea poate fi realizată în cinci forme. Acestea pot fi clasificate ca:
- Moștenire singură (doar o singură clasă superioară)
- Moștenire multiplă (mai multe superclase)
- Moștenire ierarhică (o super-clasă, multe subclase)
- Moștenirea multiplă (derivată dintr-o clasă derivată)
În Java, clasa moștenește cealaltă clasă folosind cuvântul cheie "extinde". În Java, clasa de bază este denumită clasă super, iar clasa derivată este denumită subclasă. O subclasă nu poate accesa acei membri ai clasei de bază, care sunt declarați "privați". Forma generală care moștenește clasa în Java este după cum urmează.
class derived-class-name extinde baza-clasa-nume {// corp al clasei};
Java nu acceptă moștenirea moștenirii multiple, în timp ce suportă ierarhia pe mai multe nivele. În Java, uneori o clasă super poate dori să ascundă detaliile de implementare și face ca o parte din aceste date să fie "privată". Ca și în Java, o subclasă nu poate accesa membrii privați ai superclasei și dacă o subclasă dorește să acceseze sau să inițieze acei membri, atunci Java oferă o soluție. Subclasa poate referi membrii superclasei sale imediate folosind un cuvânt cheie "super". Amintiți-vă că puteți accesa doar membrii superclasei imediate.
"Super" are două forme generale. Primul este, se numește constructor de clasă super. Al doilea este să accesați membrul superclasei care a fost ascuns de membrul subclaselor.
// prima formă de a apela constructorul. clasa supper_class {supper_class (argument_list) {..} // constructor de clasa super}; clasa sub_class extinde supper_class {sub_class (argument_list) {..} // constructor de sub_class super (argument_list); // sub_class sună constructorul clasei super}};
// secunde pentru clasa "super" supper_class {int i; } class sub_class extinde supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' de super clasa i = b; // 'i' din subclasa}};
Definiția Polymorphism
Termenul polimorfism pur și simplu înseamnă "o funcție, forme multiple". Polimorfismul este atins atât la timpul de compilare, cât și la timpul de execuție. Polimorfismul de compilare a timpului se realizează prin "supraîncărcare", în timp ce polimorfismul timpului de execuție se realizează prin "depășire".
Polimorfismul permite obiectului să decidă "care formă a funcției care trebuie invocată atunci când" la ambele, compilați timpul și timpul de execuție.
Să discutăm primul concept de supraîncărcare. În timpul supraîncărcării, definim o funcție în clasă mai mult de o dată cu alt tip de date și numărul de parametri, în timp ce funcția care trebuie supraîncărcată trebuie să aibă același tip de retur. De cele mai multe ori funcțiile la supraîncărcate sunt constructorii clasei.
suprasarcină de tip {int a, b; public: int supraîncărcare (int x) {// primul suprasarcină () constructor a = x; returnați un; } int supraîncărcare (int x, int y) {// al doilea constructor de suprasarcină () a = x; b = y; returnați a * b; }}; int main () {suprasarcină O1; O1.overload (20); // prima suprasarcină () constructor call O1.overload (20, 40); // second load overload () constructor}
Acum, să discutăm cea de-a doua formă de polimorfism, adică imperativ. Conceptul de suprimare poate fi implementat doar în funcție de clasele care pun în aplicare și conceptul de moștenire. În C ++, funcția care trebuie suprimată este precedată de cuvântul cheie "virtual" din clasa de bază și redefinită în clasa derivată cu același prototip, cu excepția cuvântului "virtual".
clasa de bază {public: virtual void funct () {// funcția virtuală a clasei de bază cout << "Aceasta este o clasă de bază funct ()"; }}; class derived1: public base {public: void funct () {// funcția virtuală a clasei de bază redefinită în derivate class coutDiferențele cheie între moștenire și polimorfism
- Moștenirea creează o clasă care derivă dintr-o clasă deja existentă. Pe de altă parte, polimorfismul este o interfață care poate fi definită în mai multe forme.
- Moștenirea este implementată pe clase, în timp ce polimorfismul este implementat pe metode / funcții.
- Deoarece moștenirea permite unei clase derivate să utilizeze elementele și metodele definite în clasa de bază, clasa derivată nu are nevoie să definească acele elemente sau să o folosească din nou, deci putem spune că crește gradul de reutilizare a codului și, prin urmare, reduce lungimea codului . Pe de altă parte, polimorfismul face posibil ca un obiect să decidă ce formă a metodei pe care dorește să o invocă atât la timpul de compilare cât și la timpul de execuție.
- Moștenirea poate fi clasificată drept moștenire unică, moștenire multiplă, moștenire pe mai multe niveluri, moștenire ierarhică și moștenire hibridă. Pe de altă parte, polimorfismul este clasificat ca supraîncărcare și suprasolicitare.
Concluzie:
Moștenirea și polimorfismul sunt concepte interdependente, deoarece polimorfismul dinamic se aplică claselor care pun în aplicare și conceptul de moștenire.