Skillnad mellan ärft och polymorfism

Författare: Laura McKinney
Skapelsedatum: 1 April 2021
Uppdatera Datum: 9 Maj 2024
Anonim
Skillnad mellan ärft och polymorfism - Teknologi
Skillnad mellan ärft och polymorfism - Teknologi

Innehåll


Arv tillåter, kodåteranvändbarhet och polymorfism är förekomsten av en funktion med annan form. Den grundläggande skillnaden mellan arv och polymorfism är att arv gör att den redan befintliga koden kan återanvändas igen i ett program, och polymorfism tillhandahåller en mekanism för att dynamiskt bestämma vilken form av en funktion som ska åberopas.

  1. Jämförelsediagram
  2. Definition
  3. Viktiga skillnader
  4. Slutsats

Jämförelsediagram

Grund för jämförelseArvpolymorfism
GrundläggandeArv skapar en ny klass med egenskaperna för den redan befintliga klassen.Polymorfism är i princip ett vanligt gränssnitt för flera former.
GenomförandeArv genomförs i princip på klasser.Polymorfism implementeras i princip på funktion / metoder.
Använda sig avFör att stödja begreppet återanvändbarhet i OOP och minska kodlängden.Tillåter objekt att bestämma vilken form av funktionen som ska åberopas när, vid kompileringstid (överbelastning) såväl som körtid (överskridande).
formulärArv kan vara en enda arv, multipel arv, flernivå arv, hierarkisk arv och hybrid arv.Polymorfism kan vara en kompilering av tidspolymorfism (överbelastning) eller körtidspolymorfism (överskridande).
ExempelKlassbordet kan ärva funktionen hos klassmöblerna, eftersom ett bord är ett möbler.Klassen study_table kan också ha funktionen set_color () och en klass Dining_table kan också ha funktionen set_color () så vilken form av set_color () -funktionen att åberopa kan bestämmas vid båda, sammanställa tid och körtid.


Definition av ärft:

Arv är en av de avgörande funktionerna i OOP, som starkt stöder ”återanvändbarhet”. Återanvändbarhet kan beskrivas som att skapa en ny klass genom att återanvända egenskaperna för den befintliga klassen. I arv finns det en basklass som ärvs av den härledda klassen. När en klass ärver någon annan klass blir medlemmen i basklassen medlemmen i en härledd klass.

Den allmänna formen för att ärva en klass är som följer:

klass härledd-klassnamn: access-specificer bas-klass-namn {// body of class};

Här tillhandahåller åtkomstspecifikationen åtkomstläget (privat, offentligt, skyddat) till medlemmarna i basklassen till den härledda klassen. Om ingen åtkomstspecifikation finns, betraktas den som ”privat” som standard. I C ++, om den härledda klassen är "struktur", är åtkomstspecifikationen "public" som standard.


I C ++ kan arv uppnås i fem former. De kan klassificeras som: -

  • Enstaka arv (endast en superklass)
  • Multipel ärft (flera superklass)
  • Hierarkisk arv (en superklass, många underklasser)
  • Multipel ärft (härledd från en härledd klass)

I Java ärver klassen den andra klassen med hjälp av nyckelordet "extends". I Java benämns basklassen som en superklass och den härledda klassen kallas en underklass. En underklass har inte tillgång till de medlemmar i basklassen, som förklaras som ”privat”. Den allmänna formen som ärver klassen i Java är som följer.

klass härledd klassnamn utökar basklassenamn {// klassens kropp};

Java stöder inte arvet från flera arv, medan det stöder flernivåhierarki. I Java kanske ibland en superklass vill dölja sina implementeringsdetaljer, och det gör någon del av datan "privat". Liksom i Java kan en underklass inte få åtkomst till de privata medlemmarna i superklassen och om en underklass vill komma åt eller initiera dessa medlemmar, ger Java en lösning. Underklassen kan hänvisa medlemmarna i dess omedelbara superklass med hjälp av ett nyckelord "super". Kom ihåg att du bara kan komma åt medlemmarna i den omedelbara superklassen.

”Super” har två allmänna former. Den första är att den använder för att kalla konstruktören av superklass. Den andra är att få åtkomst till medlemmen i superklassen som har gömts av medlemmen i underklassen.

// första formen för att ringa konstruktören. klass supper_class {supper_class (argument_list) {..} // konstruktör av superklass}; klass sub_klass utvidgar supper_class {sub_class (argument_list) {..} // konstruktör av sub_class super (argument_list); // sub_klass kallar konstruktören för superklass}};

// sekund för superklass supper_class {int i; } klass sub_klass förlänger supper_class {int i; sub_klass (int a, int b) {super.i = a; // i superklass i = b; // i underklassen}};

Definition av polymorfism

Termen polymorfism betyder helt enkelt "en funktion, flera former". Polymorfism uppnås vid både sammanställningstid och körtid. Polymorfismen för kompileringstid uppnås genom "överbelastning" medan polymorfismen för körtid uppnås genom "överskridande".

Polymorfismen tillåter objektet att bestämma ”vilken form av funktion som ska åberopas när” vid båda, sammanställa tid och körtid.
Låt oss diskutera det första konceptet med överbelastning. Vid överbelastning definierar vi en funktion i klassen mer än en gång med olika datatyp och antalet parametrar medan funktionen som ska överbelastas måste ha samma returtyp. De flesta gånger funktionerna till överbelastade är konstruktörer av klassen.

klassöverbelastning {int a, b; public: int overload (int x) {// first overload () konstruktör a = x; return a; } int överbelastning (int x, int y) {// andra överbelastning () konstruktör a = x; b = y; returnera a * b; }}; int main () {överbelastning O1; O1.overload (20); // första överbelastning () konstruktorsamtal O1.overload (20,40); // andra överbelastning () konstruktorsamtal}

Låt oss nu diskutera den andra formen av polymorfism, dvs. åsidosättande. Begreppet åsidosättande kan endast implementeras till funktionen för klasserna som också implementerar arvet. I C ++ föregås den funktion som ska åsidosättas av nyckelordet "virtuell" i basklassen och omdefinieras i den härledda klassen med samma prototyp förutom nyckelordet "virtuell".

klassbasen {public: virtual void funct () {// virtual reality of bas class cout << "Detta är en basklasserfunktion ()"; }}; klass härledd1: public base {public: void funct () {// virtuell funktion av basklassen omdefinierad i deriv1 class cout << "Detta är en deriverad1 klasser funktion ()"; }}; int main () {base * p, b; härledd1 d1; * P = & b; p-> funkt (); // samtal till basklassfunktion (). * P = & d1; retur 0; }

  1. Arv skapar en klass som härleder sin funktion från en redan befintlig klass. Å andra sidan är polymorfism ett gränssnitt som kan definieras i flera former.
  2. Arv implementeras på klasserna medan polymorfismen implementeras på metoder / funktioner.
  3. Eftersom arv tillåter en härledd klass att använda de element och metoder som definieras i basklassen, behöver den härledda klassen inte definiera dessa element eller metod det igen, så vi kan säga att det ökar återanvändbarhet och därmed minskar kodens längd . Å andra sidan gör polymorfism det möjligt för ett objekt att bestämma vilken form av metoden den vill åberopa både vid sammanställningstid och körtid.
  4. Arvet kan klassificeras som enkel arv, multipel arv, flernivå arv, hierarkisk arv och hybrid arv. Å andra sidan klassificeras polymorfism som överbelastning och överskridande.

Slutsats:

Arv och polymorfism är sammanhängande begrepp, eftersom den dynamiska polymorfismen gäller de klasser som också implementerar arvet.