Empfohlen, 2024

Tipp Der Redaktion

Unterschied zwischen Vererbung und Polymorphismus

Vererbung erlaubt, Wiederverwendbarkeit von Code und der Polymorphismus ist das Auftreten einer Funktion mit unterschiedlicher Form. Der grundlegende Unterschied zwischen Vererbung und Polymorphismus besteht darin, dass durch die Vererbung der bereits vorhandene Code in einem Programm erneut verwendet werden kann, und der Polymorphismus bietet einen Mechanismus zur dynamischen Entscheidung, welche Form einer Funktion aufgerufen werden soll.

Vergleichstabelle

VergleichsgrundlageErbePolymorphismus
BasicVererbung erstellt eine neue Klasse unter Verwendung der Eigenschaften der bereits vorhandenen Klasse.Polymorphismus ist im Grunde eine gemeinsame Schnittstelle für mehrere Formen.
ImplementierungVererbung wird grundsätzlich in Klassen implementiert.Polymorphismus wird grundsätzlich in Funktion / Methoden implementiert.
BenutzenUnterstützt das Konzept der Wiederverwendbarkeit in OOP und reduziert die Länge des Codes.Ermöglicht dem Objekt zu entscheiden, welche Form der Funktion aufgerufen wird, wann, zur Kompilierzeit (Überladung) sowie zur Laufzeit (Überschreibung).
FormenVererbung kann eine einzelne Vererbung, mehrere Vererbung, mehrstufige Vererbung, hierarchische Vererbung und Hybridvererbung sein.Polymorphismus kann ein Kompilierzeitpolymorphismus (Überladung) oder Laufzeitpolymorphismus (Überschreiben) sein.
BeispielDie Klasse 'Tisch' kann das Merkmal der Klasse 'Möbel' erben, da ein 'Tisch' ein 'Möbel' ist.Die Klasse 'study_table' kann auch die Funktion 'set_color ()' haben, und die Klasse 'Dining_table' kann auch die Funktion 'set_color ()' haben. Auf diese Weise kann festgelegt werden, welche Form der aufzurufenden Funktion set_color () sowohl zur Kompilierzeit als auch zur Kompilierzeit bestimmt werden kann Laufzeit

Definition der Vererbung:

Vererbung ist eines der entscheidenden Merkmale von OOP, die die Wiederverwendbarkeit stark unterstützen. Die Wiederverwendbarkeit kann als Erstellen einer neuen Klasse beschrieben werden, indem die Eigenschaften der vorhandenen Klasse wiederverwendet werden. Bei der Vererbung gibt es eine Basisklasse, die von der abgeleiteten Klasse geerbt wird. Wenn eine Klasse eine andere Klasse erbt, werden die Member der Basisklasse die Member einer abgeleiteten Klasse.

Die allgemeine Form der Vererbung einer Klasse lautet wie folgt:

 Klasse abgeleiteter Klassenname: Zugriffsspezifizierer Basisklassenname {// Hauptteil der Klasse}; 

Hier stellt der Zugriffsbezeichner den Zugriffsmodus (privat, öffentlich, geschützt) auf die Member der Basisklasse auf die abgeleitete Klasse bereit. Wenn kein Zugriffsspezifizierer vorhanden ist, wird er standardmäßig als "privat" betrachtet. Wenn in C ++ die abgeleitete Klasse "struct" ist, ist der Zugriffsbezeichner standardmäßig "public".

In C ++ kann Vererbung in fünf Formen erreicht werden. Sie können klassifiziert werden als: -

  • Einzelvererbung (nur eine Superklasse)
  • Mehrfachvererbung (mehrere Superklassen)
  • Hierarchische Vererbung (eine Superklasse, viele Unterklassen)
  • Mehrfachvererbung (abgeleitet von einer abgeleiteten Klasse)

In Java erbt die Klasse die andere Klasse mit dem Schlüsselwort "extend". In Java wird die Basisklasse als Superklasse und die abgeleitete Klasse als Unterklasse bezeichnet. Eine Unterklasse kann nicht auf die Mitglieder der Basisklasse zugreifen, die als „privat“ deklariert sind. Das allgemeine Formular, das die Klasse in Java erbt, ist wie folgt.

 Klasse abgeleiteter Klassenname erweitert Basisklassenname {// Hauptteil der Klasse}; 

Java unterstützt nicht die Vererbung von Mehrfachvererbung, während es die mehrstufige Hierarchie unterstützt. In Java möchte eine Superklasse manchmal die Implementierungsdetails ausblenden, und einige dieser Daten werden als "privat" bezeichnet. Wie in Java kann eine Unterklasse nicht auf die privaten Mitglieder der Superklasse zugreifen. Wenn eine Unterklasse auf diese Mitglieder zugreifen oder diese initialisieren möchte, bietet Java eine Lösung. Die Unterklasse kann die Mitglieder ihrer unmittelbaren Oberklasse mit dem Schlüsselwort "super" referenzieren. Denken Sie daran, dass Sie nur auf die Mitglieder der unmittelbaren Superklasse zugreifen können.

Das "Super" hat zwei allgemeine Formen. Die erste ist, es wird verwendet, um den Konstruktor der Superklasse aufzurufen. Die zweite ist, auf das Mitglied der Superklasse zuzugreifen, das von dem Mitglied der Unterklasse ausgeblendet wurde.

 // erste Form des Aufrufs des Konstruktors. class supper_class {supper_class (argument_list) {..} // Konstruktor der übergeordneten Klasse}; class sub_class erweitert supper_class {sub_class (argument_list) {..} // Konstruktor von sub_class super (argument_list); // sub_class ruft den Konstruktor der übergeordneten Klasse auf}}; 
 // Sekunde für 'super' Klasse supper_class {int i; } class sub_class erweitert supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' der Superklasse i = b; // 'i' der Unterklasse}}; 

Definition von Polymorphismus

Der Begriff Polymorphismus bedeutet einfach "eine Funktion, mehrere Formen". Polymorphismus wird sowohl zur Kompilierzeit als auch zur Laufzeit erreicht. Der Kompilierzeitpolymorphismus wird durch "Überladen" erreicht, während der Laufzeitpolymorphismus durch "Überschreiben" erreicht wird.

Durch den Polymorphismus kann das Objekt entscheiden, welche Form der Funktion wann aufgerufen wird, und zwar sowohl zur Kompilierzeit als auch zur Laufzeit.
Lassen Sie uns das erste Konzept der Überladung besprechen. Beim Überladen definieren wir eine Funktion in der Klasse mehrmals mit unterschiedlichem Datentyp und der Anzahl der Parameter, während die zu überladende Funktion denselben Rückgabetyp haben muss. Meistens sind die Funktionen für die überladenen Konstruktoren der Klasse.

 Klassenüberladung {int a, b; public: int Überladung (int x) {// erster Überladung () -Konstruktor a = x; Rückkehr a; } int Überladung (int x, int y) {// second overload () - Konstruktor a = x; b = y; Rückgabe a * b; }}; int main () {Überladung O1; O1.Überlast (20); // erster Überladung () -Konstruktoraufruf O1.overload (20, 40); // zweiter Überladung () -Konstruktoraufruf} 

Lassen Sie uns nun die zweite Form des Polymorphismus besprechen, dh das Überschreiben. Das Konzept des Überschreibens kann nur für die Funktion der Klassen implementiert werden, die auch das Konzept der Vererbung implementieren. In C ++ wird der zu überschreibenden Funktion das Schlüsselwort "virtual" in der Basisklasse vorangestellt und in der abgeleiteten Klasse mit demselben Prototyp außer dem Schlüsselwort "virtual" neu definiert.

 class base {public: virtuelles void funct () {// virtuelle Funktion der Basisklasse cout << "Dies ist die Funktion einer Basisklasse ()"; }}; Klasse abgeleitet1: öffentliche Basis {public: void funct () {// virtuelle Funktion der Basisklasse in abgeleiteter1 Klasse cout neu definiert 

Hauptunterschiede zwischen Vererbung und Polymorphismus

  1. Vererbung erstellt eine Klasse, die ihr Feature von einer bereits vorhandenen Klasse ableitet. Auf der anderen Seite ist Polymorphismus eine Schnittstelle, die in mehreren Formen definiert werden kann.
  2. Vererbung wird in den Klassen implementiert, während der Polymorphismus in Methoden / Funktionen implementiert wird.
  3. Da Vererbung einer abgeleiteten Klasse die Verwendung der in der Basisklasse definierten Elemente und Methoden ermöglicht, muss die abgeleitete Klasse diese Elemente oder Methoden nicht erneut definieren. Sie kann also die Wiederverwendbarkeit von Code erhöhen und somit die Länge des Codes verringern . Andererseits ermöglicht der Polymorphismus einem Objekt die Entscheidung, welche Form der Methode es sowohl zur Kompilierzeit als auch zur Laufzeit aufrufen möchte.
  4. Die Vererbung kann als einfache Vererbung, mehrfache Vererbung, mehrstufige Vererbung, hierarchische Vererbung und Hybridvererbung klassifiziert werden. Auf der anderen Seite wird Polymorphismus als überladen und übergeordnet eingestuft.

Fazit:

Die Vererbung und der Polymorphismus sind miteinander verbundene Begriffe, da der dynamische Polymorphismus für die Klassen gilt, die auch das Konzept der Vererbung implementieren.

Top