Razlika između nasljeđivanja i polimorfizma

Autor: Laura McKinney
Datum Stvaranja: 1 Travanj 2021
Datum Ažuriranja: 11 Svibanj 2024
Anonim
Difference between inheritance and polymorphism | Java tutorial for beginners part 13.
Video: Difference between inheritance and polymorphism | Java tutorial for beginners part 13.

Sadržaj


Nasljeđivanje dopušta, ponovnu upotrebu koda i polimorfizam, pojavu jedne funkcije različitog oblika. Osnovna razlika između nasljeđivanja i polimorfizma je u tome što nasljeđivanje omogućuje ponovno korištenje već postojećeg koda u programu, a polimorfizam omogućuje mehanizam da dinamički odluči koji će oblik funkcije biti pozvan.

  1. Usporedni grafikon
  2. definicija
  3. Ključne razlike
  4. Zaključak

Usporedni grafikon

Osnove za usporedbubaštinapolimorfizam
Osnovni, temeljniNasljeđivanje stvara novu klasu koristeći svojstva već postojeće klase.Polimorfizam je u osnovi uobičajeno sučelje višestrukog oblika.
izvršenjeNasljeđivanje se u osnovi provodi na časovima.Polimorfizam se u osnovi provodi na funkciji / metodi.
KoristitiPodržati koncept ponovne upotrebe u OOP-u i smanjuje duljinu koda.Omogućuje objektu da odluči koji će oblik funkcije biti pozvan kada je vrijeme kompiliranja (preopterećenje) kao i vrijeme izvođenja (prevladavanje).
obrasciNasljeđivanje može biti pojedinačno nasljeđivanje, višestruko nasljeđivanje, višeslojno nasljeđivanje, hijerarhijsko nasljeđivanje i hibridno nasljeđivanje.Polimorfizam može biti vremenski polimorfizam (preopterećenje) ili polimorfizam u toku vremena (prevladavanje).
PrimjerTablica klase može naslijediti obilježje klasičnog namještaja, jer je stol namještaj.Klasa_predaja klase također može imati funkciju set_color (), a klasa Dining_table može imati i funkciju set_color (), tako da o obliku funkcije set_color () u kojem se može pozvati može se odrediti i vrijeme, i vrijeme sastavljanja i vrijeme izvršavanja.


Definicija nasljeđivanja:

Nasljeđivanje je jedno od ključnih obilježja OOP-a, koje snažno podržavaju "ponovnu upotrebu". Ponovna upotreba može se opisati stvaranjem nove klase ponovnom uporabom svojstava postojeće klase. U nasljeđivanju postoji osnovna klasa koja nasljeđuje izvedenu klasu. Kad klasa naslijedi bilo koju drugu klasu, član (i) osnovne klase postaju članovi (i) izvedene klase.

Opći oblik nasljeđivanja klase je sljedeći:

class-class-name-name: specifikator pristupa base-class-name {// tijelo klase};

Ovdje odrednik pristupa pruža način pristupa (privatnim, javnim, zaštićenim) članovima u osnovnoj klasi izvedenoj klasi. Ako nije prisutan specifikator pristupa, po defaultu se smatra "privatnim". U C ++, ako je izvedena klasa "struct", tada je specifikator pristupa prema zadanom "javni".

U C ++ nasljeđivanje se može postići u pet oblika. Mogu se klasificirati kao:

  • Pojedinačno nasljeđivanje (samo jedna super klasa)
  • Višestruko nasljeđivanje (nekoliko superklasa)
  • Hijerarhijsko nasljeđivanje (jedna super klasa, mnogo potklasa)
  • Višestruko nasljeđivanje (izvedeno iz izvedenog razreda)

U Javi klasa nasljeđuje drugu klasu pomoću ključne riječi "extends". U Javi se osnovna klasa naziva super klasa, a izvedena klasa se naziva podklasa. Podrazred ne može pristupiti onim članovima osnovne klase koji su deklarirani kao "privatni". Opći oblik nasljeđivanja klase u Javi je sljedeći.


class izvedeno-class-name proširuje ime osnovne klase {// tijelo klase};

Java ne podržava nasljeđivanje višestrukog nasljeđivanja, dok podržava višerazinsku hijerarhiju. U Javi ponekad super klasa želi sakriti detalje implementacije i neki dio tih podataka čini „privatnim“. Kao i u Javi, podrazred ne može pristupiti privatnim članovima pretklasa, a ako podrazred želi pristupiti ili ih inicijalizirati, Java nudi rješenje. Podrazred može članove svog neposrednog podrazreda uputiti korištenjem ključne riječi "super". Zapamtite, možete pristupiti samo članovima neposrednog superklasa.

'Super' ima dva općenita oblika. Prvo se koristi konstrukcijom super klase. Drugo je pristupiti članu superklase koji je skrivio član podrazreda.

// prvi oblik pozivanja konstruktora. klasa supper_class {supper_class (argument_list) {..} // konstruktor super klase}; klasa sub_class proširuje supper_class {sub_class (argument_list) {..} // konstruktor sub_class super (argument_list); // sub_class poziva konstruktora super klase}};

// drugi za super klasu supper_class {int i; } klasa sub_class proširuje supper_class {int i; sub_class (int a, int b) {super.i = a; // i super klase i = b; // i podklase}};

Definicija polimorfizma

Izraz polimorfizam jednostavno znači "jedna funkcija, više oblika". Polimorfizam se postiže i u vrijeme sastavljanja i u tijeku. Vrijeme polimorfizma pri sastavljanju postiže se "preopterećenjem", dok se polimorfizam vremena izvođenja postiže "nadjačavanjem".

Polimorfizam omogućuje objektu da odluči „koji će oblik funkcije biti pozvan“ u oba vremena, sastaviti vrijeme i vrijeme izvođenja.
Razgovarajmo o prvom konceptu preopterećenja. Kod preopterećenja definiramo funkciju u klasi više puta s različitim, vrstama podataka i brojem parametara, dok funkcija koja se preopterećuje mora imati istu vrstu povratka. Većina funkcija preopterećenih su uglavnom konstruktori klase.

preopterećenje klase {int a, b; public: int overload (int x) {// prvi konstruktor overload () a = x; vratiti a; } int preopterećenje (int x, int y) {// drugi konstruktor preopterećenja () a = x; b = y; vratiti a * b; }}; int main () {preopterećenje O1; O1.overload (20); // prvi konstruktor overload () poziva O1.overload (20,40); // drugi poziv konstruktora overload ()}

Sada ćemo razgovarati o drugom obliku polimorfizma, tj. Prevladavanju. Koncept prevladavanja može se implementirati samo u funkciju klasa koje također provode koncept nasljeđivanja. U C ++ funkciji koju treba preglasiti prethodi ključna riječ "virtualni" u osnovnoj klasi i redefinira u izvedenoj klasi s istim prototipom, osim ključne riječi "virtualno".

klasa baza {public: virtual void funct () {// virtualna funkcija cout baze klase << "Ovo je funkcija class class base ()"; }}; klasa izvedena1: javna baza {public: void funct () {// virtualna funkcija osnovne klase redefinirana u izvedenom1 razredu cout << "Ovo je izvedena1 klasa funct ()"; }}; int main () {baza * p, b; izveden1 d1; * P = b; p> Funct (); // poziv na funkciju osnovne klase (). * P = d1; vratiti 0; }

  1. Nasljeđivanje stvara klasu koja svoj značaj ima iz već postojeće klase. S druge strane, polimorfizam je sučelje koje se može definirati u više oblika.
  2. Nasljeđivanje se provodi na klasama dok se polimorfizam provodi na metodama / funkcijama.
  3. Kako nasljeđivanje omogućuje izvedenoj klasi da koristi elemente i metode definirane u osnovnoj klasi, izvedena klasa ne treba ih definirati ili ponovno obrađivati, tako da možemo reći da povećava ponovnu upotrebu koda i, samim tim, smanjuje duljinu koda , S druge strane, polimorfizam omogućuje predmetu da odluči koji oblik metode želi pozvati i u vrijeme sastavljanja i u vremenu izvođenja.
  4. Nasljeđivanje se može klasificirati kao pojedinačno nasljeđivanje, višestruko nasljeđivanje, višeslojno nasljeđivanje, hijerarhijsko nasljeđivanje i hibridno nasljeđivanje. S druge strane, polimorfizam se klasificira kao preopterećenje i prevladavanje.

Zaključak:

Nasljeđivanje i polimorfizam međusobno su povezani pojmovi, jer se dinamički polimorfizam primjenjuje na klase koje također primjenjuju koncept nasljeđivanja.