Preporučeno, 2024

Izbor Urednika

Razlika između nasljeđivanja i polimorfizma

Nasljeđivanje omogućuje, ponovnu upotrebu koda i polimorfizam, pojavu jedne funkcije s različitim oblikom. 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 osigurava mehanizam za dinamičko odlučivanje o obliku funkcije koju treba pozvati.

Tablica usporedbe

Osnova za usporedbubaštinapolimorfizam
Osnovni, temeljniNasljeđivanje stvara novu klasu koristeći svojstva već postojeće klase.Polimorfizam je u osnovi zajedničko sučelje za višestruki oblik.
izvršenjeNasljeđivanje se u osnovi implementira na klase.Polimorfizam se u osnovi primjenjuje na funkciju / metode.
KoristitiPodržati koncept ponovnog korištenja u OOP-u i smanjuje duljinu koda.Omogućuje objektu da odluči koji će se oblik funkcije pozvati kada, u vrijeme prevođenja (preopterećenje) kao i vrijeme izvođenja (nadjačavanje).
obrasciNasljeđivanje može biti jedno nasljeđivanje, višestruko nasljeđivanje, nasljeđivanje na više razina, hijerarhijsko nasljeđivanje i hibridno nasljeđivanje.Polimorfizam može biti polimorfizam vremena prevođenja (preopterećenje) ili polimorfizam u vremenu izvođenja (nadjačavanje).
PrimjerKlasa 'stol' može naslijediti značajku klase 'namještaj', jer je 'stol' 'namještaj'.Klasa 'study_table' također može imati funkciju 'set_color ()', a klasa 'Dining_table' također može imati funkciju 'set_color ()' tako da, koji oblik funkcije set_color () poziva se može odlučiti na oba načina, vrijeme prevođenja i vrijeme izvođenja.

Definicija nasljeđivanja:

Nasljeđivanje je jedna od ključnih značajki OOP-a, koja snažno podržava "ponovnu iskoristivost". Ponovna upotrebljivost može se opisati kao stvaranje nove klase ponovnim korištenjem svojstava postojeće klase. U nasljeđivanju postoji osnovna klasa, koju nasljeđuje izvedena klasa. Kada klasa naslijedi bilo koju drugu klasu, član (i) osnovne klase postaje član (i) izvedene klase.

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

 class izvedeno-ime-klase: pristupni-specifikator base-class-name {// tijelo klase}; 

Ovdje specifikator pristupa osigurava način pristupa (privatni, javni, zaštićeni) članu (ima) u osnovnoj klasi izvedenoj klasi. Ako ne postoji specifikator pristupa, po defaultu, on se smatra "privatnim". U C ++-u, ako je izvedena klasa “struct”, onda je pojam zadani pristup “public”.

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 nadklasa)
  • Hijerarhijsko nasljeđivanje (jedna super klasa, mnogo podklasa)
  • Više nasljeđivanja (izvedeno iz izvedene klase)

U Javi, klasa nasljeđuje drugu klasu koristeći ključnu riječ "proteže". U Javi se osnovna klasa naziva super klasa, a izvedena klasa se navodi kao podklasa. Podklasa ne može pristupiti onim članovima osnovne klase, koji su deklarirani kao "privatni". Opći oblik koji nasljeđuje klasu u Javi je kao što slijedi.

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

Java ne podržava nasljeđivanje višestrukog nasljeđivanja, dok podržava višerazinsku hijerarhiju. U Javi, ponekad super klasa možda želi sakriti svoje detalje implementacije, a neki dio tih podataka čini "privatnim". Kao u Javi, podklasa ne može pristupiti privatnim članovima superklase i ako potklasa želi pristupiti tim članovima ili ih inicijalizirati, onda Java pruža rješenje. Podklasa može upućivati ​​članove svoje neposredne superklase pomoću ključne riječi "super". Zapamtite, možete pristupiti samo članovima neposrednog superklasa.

"Super" ima dva opća oblika. Prvi je, koristi se za pozivanje konstruktora super klase. Drugi je pristup članu superklase koji je sakriven od strane člana podrazreda.

 // prvi oblik pozivanja konstruktora. klasa supper_class {supper_class (argument_list) {..} // konstruktor super klase}; class sub_class proširuje supper_class {sub_class (argument_list) {..} // konstruktor sub_class super (argument_list); // sub_class poziva konstruktora super klase}}; 
 // drugo za 'super' klasu supper_class {int i; } class sub_class proširuje supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' super klase i = b; // 'i' podklasa}}; 

Definicija polimorfizma

Izraz polimorfizam jednostavno znači 'jedna funkcija, višestruki oblici'. Polimorfizam se postiže i na vrijeme kompajliranja i na vrijeme izvođenja. Polimorfizam vremena kompajliranja se postiže "preopterećenjem", dok se polimorfizam vremena izvođenja postiže "prekoračenjem".

Polimorfizam dozvoljava objektu da odluči “koji oblik funkcije koja će se pozvati kada” na oba, prevesti vrijeme i vrijeme izvođenja.
Razmotrimo prvi koncept preopterećenja. U preopterećenju definiramo funkciju u klasi više od jednog puta s različitim, tipom podataka i brojem parametara, dok funkcija za preopterećenje mora imati isti povratni tip. Većina vremena preopterećenih funkcija su konstruktori klase.

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

Razmotrimo sada drugi oblik polimorfizma, tj. Premostiti. Koncept nadjačavanja može se primijeniti samo na funkciju klasa koje također primjenjuju koncept nasljeđivanja. U C ++, funkciji koju treba nadjačati prethodi ključna riječ “virtual” u osnovnoj klasi i redefinirana u izvedenoj klasi s istim prototipom osim ključne riječi “virtual”.

 klasa baza {public: virtual void funct () {// virtualna funkcija bazne klase cout << "Ovo je funkcija osnovne klase ()"; }}; klasa izvedena1: javna baza {javna: void funct () {// virtualna funkcija osnovne klase redefinirana u izvedenom razredu cout 

Ključne razlike između nasljeđivanja i polimorfizma

  1. Nasljeđivanje stvara klasu koja svoju značajku izvodi 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. Budući da nasljeđivanje dopušta izvedenoj klasi da koristi elemente i metode definirane u osnovnoj klasi, izvedena klasa ne mora ponovno definirati te elemente ili metodu tako da možemo reći da povećava mogućnost ponovnog korištenja koda i stoga smanjuje duljinu koda, S druge strane, polimorfizam omogućuje objektu da odluči koji oblik metode želi pozvati i na vrijeme kompajliranja i na vrijeme izvođenja.
  4. Nasljeđivanje se može klasificirati kao pojedinačno nasljeđivanje, višestruko nasljeđivanje, nasljeđivanje na više razina, hijerarhijsko nasljeđivanje i hibridno nasljeđivanje. S druge strane, polimorfizam se klasificira kao preopterećenje i poništavanje.

Zaključak:

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

Top