Polymorphismus vs. Vererbung: Unterschied zwischen Polymorphismus und Vererbung [2022]

Veröffentlicht: 2021-01-05

Polymorphismus und Vererbung sind beides sehr grundlegende Konzepte der objektorientierten Programmierung. Das Hinzufügen von Objekten in modernen Programmiersprachen hat die Art und Weise, wie wir die Sprache verwenden, und die Dinge, die wir damit tun können, erheblich verändert. Kurz gesagt, objektorientierte Programmierung ist eine Reihe von Methoden, die es dem Programmierer ermöglichen, Klassen zu verwenden und somit Objekte auf der Grundlage dieser Klassen abzuleiten.

Es zielt darauf ab, realen Entitäten zu ähneln und es Programmierern zu erleichtern, ihren Code einschließlich des Paradigmas zu erstellen, in dem sie ihren Code schreiben. Es gibt im Wesentlichen vier objektorientierte Programmierkonzepte, nämlich Vererbung, Abstraktion, Polymorphismus und Kapselung. Nun kann jede der Ideen, wie bereits erwähnt, als die Säule angesehen werden, auf der jede moderne Sprache steht.

Zurück zu unserem Thema Polymorphie vs. Vererbung und Fledermausrecht sehen wir einen eklatanten Unterschied zwischen den beiden Konzepten. Vererbung ist das Konzept, das es ermöglicht, den Code in demselben oder einem anderen Programm wiederzuverwenden. Wir können sogar das Verhalten des Codes ändern, indem wir die Dinge behalten, die uns gefallen, und diejenigen verwerfen, die für die Aufgaben, die wir zu erfüllen versuchen, nicht nützlich sind. Vererbung spart viel Zeit bei der Entwicklung von fast allem, was wir heutzutage auf unseren digitalen Displays sehen.

Andererseits ist Polymorphismus dafür verantwortlich, den bereits geschriebenen Code zu diktieren und zu entscheiden, welche Art von Code basierend auf bestimmten Parametern in Echtzeit ausgeführt werden muss. Es wäre für jeden von Vorteil, zuerst jedes dieser Konzepte im Detail durchzugehen, bevor er zur Diskussion des Unterschieds zwischen Polymorphie und Vererbung übergeht. Die Unterschiede werden deutlicher, sobald wir wissen, was genau mit Vererbung und Polymorphismus gemeint ist.

Holen Sie sich Software-Engineering-Abschlüsse von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.

Inhaltsverzeichnis

Nachlass

Es wäre ein Verbrechen im Programmierparadigma, die Vererbung nicht als ein äußerst wichtiges OOP-Konzept zu betrachten. Die Bedeutung der Vererbung sollte niemals auf die leichte Schulter genommen werden, da das Ziel der Vererbung die „Wiederverwendbarkeit“ ist. Wie der Name schon sagt, ermöglicht die Vererbung, dass der in einer Klasse geschriebene Code auf eine andere Klasse erweitert werden kann. Bei der Vererbung existiert also eine Basisklasse; die Klasse, in der der Code geschrieben wurde, soll wiederverwendet werden.

Die nächste Klasse, die wir erstellen würden, müsste von dieser Basisklasse geerbt werden, um alle Funktionen und Variablen zu verwenden, die mit der Basisklasse verbunden sind. Immer wenn eine Klasse die Eigenschaften einer anderen Klasse übernimmt (oder von einer anderen Klasse erbt), werden alle Mitglieder, die in der Basisklasse vorhanden sind, Mitglieder dieser neuen abgeleiteten Klasse.

Der unten angegebene Beispielcode würde Ihnen zeigen, wie eine allgemeine Form der Vererbung aussieht. Eine wichtige Sache, die Sie hier beachten sollten, ist, dass die genaue Syntax, die Sie schreiben müssten, um die Vererbung Ihres Codes zu aktivieren, ausschließlich von der von Ihnen gewählten Programmiersprache abhängt.

  1. Klasse Abgeleiteter-Klassenname : Zugriffsspezifizierer Basisklassenname {
  2. // Körper der abgeleiteten Klasse
  3. }

In dem oben gezeigten Beispiel müssen einige Dinge ein wenig erklärt werden. Das Wort „Zugriffsbezeichner“ bedeutet, wie die abgeleitete Klasse auf die Eigenschaften und Methoden der Basisklasse zugreifen würde. Es gibt im Allgemeinen drei Zugriffsbezeichner, die jeweils ihre eigene Bedeutung (nämlich privat, öffentlich und geschützt) und Eigenschaften haben.

Auch hier müssen Sie je nach gewählter Sprache diese Zugriffskennzeichner möglicherweise verwenden oder nicht. Wenn Sie also in der Welt von C++ erben, ohne standardmäßig etwas anzugeben, wird es privat. Wenn Sie jedoch von einer Struktur erben (geht nach dem Schlüsselwort struct), wäre die Standardzugriffskennung öffentlich statt privat.

Lesen Sie: Karrieremöglichkeiten in der Programmiersprache R

C++ bietet Ihnen auch viele Optionen zur Auswahl, wenn Sie die Vererbung durchführen. Nachfolgend finden Sie einige davon aufgelistet:

A. Hierarchische Vererbung: Diese Art der Vererbung folgt der Regel, dass es nur eine Oberklasse geben sollte und dass es von dieser Oberklasse viele abgeleitete Unterklassen geben muss. Nachfolgend finden Sie ein Beispiel dafür:

  1. //Basisklasse
  2. Klasse a
  3. {
  4. öffentliche Leere funA ()
  5. {
  6. //
  7. }
  8. }
  9. //Abgeleitete Klasse
  10. Klasse B: A
  11. {
  12. öffentliche Leere funB ()
  13. {
  14. //
  15. }
  16. }
  17. //Abgeleitete Klasse
  18. Klasse C: A
  19. {
  20. öffentlich void funC()
  21. {
  22. //
  23. }
  24. }
  25. //Abgeleitete Klasse
  26. Klasse D: C
  27. {
  28. öffentlicher void funD()
  29. {
  30. //
  31. }
  32. }
  33. //Abgeleitete Klasse
  34. Klasse E:C
  35. {
  36. öffentlicher void funE()
  37. {
  38. //
  39. }
  40. }
  41. //Abgeleitete Klasse
  42. Klasse F: B
  43. {
  44. öffentliche Leere funF ()
  45. {
  46. //
  47. }
  48. }
  49. //Abgeleitete Klasse
  50. Klasse G: B
  51. {
  52. öffentliche Leere FunG ()
  53. {
  54. //
  55. }
  56. }

B. Mehrfachvererbung: Wenn Sie Mehrfachvererbung durchführen, würde dies bedeuten, dass Sie nur eine abgeleitete Unterklasse haben, die von mehreren Oberklassen erbt. Nachfolgend finden Sie ein einfaches Beispiel für Mehrfachvererbung:

  1. //Basisklasse
  2. Klasse a
  3. {
  4. öffentliche Leere funA ()
  5. {
  6. //
  7. }
  8. }
  9. //Basisklasse
  10. Klasse b
  11. {
  12. öffentliche Leere funB ()
  13. {
  14. //
  15. }
  16. }
  17. //Abgeleitete Klasse
  18. Klasse C: A, B
  19. {
  20. öffentlich void funC()
  21. {
  22. //
  23. }
  24. }

C. Einfachvererbung : Dies ist vielleicht die einfachste Form der Vererbung. Es gibt nur eine Basisklasse und eine abgeleitete Klasse. Nachfolgend finden Sie ein Beispiel:

  1. //Basisklasse
  2. Klasse a
  3. {
  4. öffentliche Leere funA ()
  5. {
  6. //MACHEN:
  7. }
  8. }
  9. //Abgeleitete Klasse
  10. Klasse B: A
  11. {
  12. öffentliche Leere funB ()
  13. {
  14. //MACHEN:
  15. }
  16. }

Polymorphismus

Die grundlegende Definition des Wortes Polymorphismus bedeutet, viele Formen zu haben. Diese Definition gilt sehr genau bei der Erklärung von Polymorphismus im Kontext der Programmierung. In diesem Paradigma nimmt Polymorphismus die Bedeutung einer Funktion, aber vieler Formen an. Polymorphismus geschieht tatsächlich zur Kompilierzeit. Polymorphismus zur Kompilierzeit ist nur aufgrund des Konzepts des Überladens möglich, und zur Laufzeit wird Polymorphismus durch das Feature des Überschreibens Wirklichkeit. Lassen Sie uns nacheinander die Definition von Überladen und Überschreiben angehen.

Das Überladen erfordert, dass der von Ihnen geschriebene Code oder die Funktion der Klasse mehr als einmal mit unterschiedlichen Parametern, aber demselben Rückgabetyp geschrieben wird. Dies bedeutet, dass die Argumente, die Sie an die Funktion übergeben, unterschiedlich sein können, und nur durch Betrachten der endgültigen Werte, die zur Laufzeit an die Funktion übergeben werden, wird entschieden, welche Form der Funktion aufgerufen werden soll. Im Allgemeinen sehen wir den Klassenkonstruktor als die am stärksten überladene Funktion. All diese Theorie wird viel klarer und es wird Ihnen leichter fallen, sie sich anhand eines Beispiels einzuprägen.

  1. Klassenüberlastung {
  2. int a, b;
  3. öffentlich zugänglich:
  4. int überladung (int x){ // erster überladung()-Konstruktor
  5. a=x;
  6. gib a zurück;
  7. }
  8. int überladung (int x, int y){ //zweiter überladung()-Konstruktor
  9. a=x;
  10. b=y;
  11. gib a*b zurück;
  12. }
  13. };
  14. int Haupt () {
  15. Überlast O1;
  16. O1. Überlast (20); //Erster Aufruf des Konstruktors überladen()
  17. O1. Überlast (20,40); // zweiter Aufruf des Konstruktors überladen()

Hier in diesem Beispiel sehen wir das Überladen in Aktion. Sehen Sie sich an, wie unterschiedliche Konstruktoren aufgerufen werden, je nachdem, ob der Endwert der Klammer des Objekts entweder eins oder zwei ist.

Lassen Sie uns als nächstes die Definition von Overriding angehen. Sie können nur bestimmte Funktionen überschreiben, die vererbt werden. Ja, die Vererbung ist ein wichtiger Punkt, um das Überschreiben von Funktionen zu ermöglichen. Wenn Sie eine Funktion schreiben und auch überschreiben möchten, müssen Sie in C++ das Schlüsselwort virtual vor der Funktionsdefinition verwenden, und in der abgeleiteten Klasse, die denselben Namen für Ihre Funktion verwendet, entfernen Sie einfach das Schlüsselwort virtual. Um Ihr Verständnis zu festigen, hier ein Beispiel:

  1. Klassenbasis{
  2. öffentlich zugänglich:
  3. virtual void funct (){ //virtuelle Funktion der Basisklasse
  4. cout<<„Dies ist die Funktion einer Basisklasse()“;
  5. }
  6. };
  7. Klasse abgeleitet1: öffentliche Basis{
  8. öffentlich zugänglich:
  9. void funct (){ //virtuelle Funktion der Basisklasse neu definiert in der abgeleiteten1 Klasse
  10. cout<<“Dies ist die Funktion einer abgeleiteten1 Klasse ()“;
  11. }
  12. };
  13. int Haupt ()
  14. {
  15. Basis *p, b;
  16. abgeleitet1 d1;
  17. *p=&b;
  18. p-> Funktion (); //Aufruf der Basisklasse funct().
  19. *p=&d1;
  20. 0 zurückgeben;
  21. }

Sehen Sie sich an, wie das Schlüsselwort virtual in der Basisklasse verwendet wird, und in der abgeleiteten Klasse ist dieselbe Funktionsdefinition vorhanden, nur das Schlüsselwort virtual fehlt.

Einige bleibende Unterschiede zwischen Polymorphismus und Vererbung:

  1. Vererbung bedeutet im Wesentlichen, eine Klasse zu erstellen und dann andere Klassen in Ihrem Programm ihre Funktion von der bereits vorhandenen Basisklasse erhalten zu lassen. Polymorphismus ist jedoch eine Schnittstelle, und weil sie eine Schnittstelle ist, kann sie verschiedene Formen und Formen annehmen.
  2. Vererbung ist eine Eigenschaft, die nur Klassen betrifft, während sich Polymorphismus auf jede Methode und/oder Funktion ausdehnt.
  3. Die Vererbung ermöglicht es der abgeleiteten Klasse, alle in der Basisklasse deklarierten Funktionen und Variablen zu verwenden, ohne sie erneut explizit zu definieren. Deshalb sagen wir, dass die Vererbung die Wiederverwendbarkeit des Codes erhöht und die Länge des Codes reduziert, den wir schreiben müssten, wenn die Vererbung nicht vorhanden wäre. Wohingegen Polymorphismus es ermöglicht, dass derselbe Funktionsname zwei sehr unterschiedliche Codes hat. Anstatt also die Länge des Codes, den wir schreiben müssten, zu reduzieren, erweitert der Polymorphismus ihn gewissermaßen weiter.
  4. Es gibt viele Formen, die Vererbung annehmen kann; Sie können mit Vererbung wirklich kreativ sein. Polymorphismus kann jedoch nur durch zwei Mittel erreicht werden, dh Überladen und Überschreiben. Sie können immer noch sehr verrückt werden, wenn Sie Polymorphismus verwenden, aber Sie sind auf nur zwei Möglichkeiten beschränkt, ihn in Ihren Schreibcode zu implementieren.

Muss gelesen werden: Muss gelesen werden 47 Fragen und Antworten zu OOPS-Interviews für Neulinge und Erfahrene

Polymorphismus vs. Vererbung: Tabellarische Differenzierung

In der folgenden Tabelle finden Sie einen klaren Unterschied zwischen Polymorphismus und Vererbung:

VERGLEICHENDE MASSNAHMEN NACHLASS POLYMORPHISMUS
Grundlegende Unterschiede zwischen den beiden Die Bedeutung der Vererbung besteht darin, neue Klassen zu erstellen, die Eigenschaften (Funktionen und Variablen der vorhandenen Klassen) haben. Es ist im Wesentlichen eine Plattform, die es ermöglicht, den Code in verschiedenen Formen zu schreiben.
Unterschiede in der Art und Weise, wie beide in Ihren Code integriert werden könnten Nur Klassen können sich einer echten Vererbung im Code erfreuen. Es kann von beliebigen Funktionen und/oder Methoden im gesamten Code implementiert und verwendet werden.
Unterschiede in der Art und Weise, wie beide verwendet werden könnten. Es ermöglicht die Wiederverwendung des geschriebenen Codes innerhalb desselben oder eines anderen Programms. Ohne sie würde der objektorientierten Programmierung ein entscheidendes Merkmal fehlen. Es ermöglicht dem deklarierten Objekt, die Entscheidung zu treffen, welche Form der Funktion aufgerufen werden soll. Es gibt zwei Zeitpunkte, an denen dies entschieden werden kann. Zur Laufzeit wird es als Überschreiben bezeichnet; Zur Kompilierzeit wird es als Überladen bezeichnet.
Beide können unterschiedliche Formen annehmen Es gibt eine Fülle von Formen, die Erbschaft annehmen kann. Es kann nur zwei Formen von Polymorphismus geben. Je nach Zeit im Programm wechselt es von überladen auf übersteuern.
Ein einfaches Beispiel, das zeigt, wie jeder von ihnen implementiert wird. Die Klasse Fahrrad kann von der Klasse der Zweiräder beerben, die wiederum eine Unterklasse von Fahrzeugen sein könnte. Die Klasse Fahrrad kann eine Methode namens set_color() haben, die die Farbe des Fahrrads basierend auf dem Namen der eingegebenen Farbe ändert.

Schauen Sie sich an: Was ist Type Casting in Java | Typecasting als Anfänger verstehen

Fazit

Man kann mit Sicherheit sagen, dass sowohl Polymorphismus als auch Vererbung entscheidende Konzepte sind, um jedes Programm Wirklichkeit werden zu lassen. Beide sind die Grundlage, auf der die Idee der objektorientierten Programmierung entstand. Es gibt viele Unterschiede zwischen Polymorphismus und Vererbung, da sie zwei sehr unterschiedlichen Zwecken dienen.

Polymorphismus ermöglicht es dem Programmierer, mehrere Definitionen einer Funktion zu schreiben. Gleichzeitig ermöglicht die Vererbung dem Benutzer, den bereits geschriebenen Code wiederzuverwenden. Um die beiden Konzepte vollständig zu verstehen und zu schätzen, wird empfohlen, dass Sie beide Themen weiter lesen.

Eine Sache, die Sie beim Schreiben von Code immer im Hinterkopf behalten sollten, ist, dass Sie den bereits geschriebenen Code umgestalten möchten (im Grunde die Definition einer Klasse und die erneute Verwendung in Ihrem Code, um eine ähnliche oder andere Klasse zu bedienen Zweck), sollten Sie von der Vererbung Gebrauch machen. Wenn Sie die allgemeine Verwirrung in Ihrem Code verringern und den gleichen Namen der Funktion für ähnliche Aufgaben verwenden möchten, sollten Sie Polymorphismus verwenden.

Wenn Sie mehr über Full-Stack-Softwareentwicklung erfahren möchten, sehen Sie sich das PG-Diplom in Full-Stack-Softwareentwicklung von upGrad & IIIT-B an, das für Berufstätige konzipiert ist und mehr als 500 Stunden strenge Schulungen, mehr als 9 Projekte und mehr bietet Aufgaben, IIIT-B-Alumni-Status, praktische praktische Schlusssteinprojekte und Arbeitsunterstützung bei Top-Unternehmen.

Planen Sie jetzt Ihre Softwareentwicklungskarriere.

Bewerben Sie sich für die berufsgebundene PG-Zertifizierung in Software Engineering von upGrad