Unterschied zwischen Vererbung und Polymorphismus

Autor: Laura McKinney
Erstelldatum: 1 April 2021
Aktualisierungsdatum: 9 Kann 2024
Anonim
Vererbung in 360 Sekunden (Objektorientierte Programmierung/Java)
Video: Vererbung in 360 Sekunden (Objektorientierte Programmierung/Java)

Inhalt


Vererbung ermöglicht, Code Wiederverwendbarkeit und der Polymorphismus ist das Auftreten einer Funktion mit unterschiedlicher Form. Der grundlegende Unterschied zwischen Vererbung und Polymorphismus besteht darin, dass durch Vererbung der bereits vorhandene Code in einem Programm wieder verwendet werden kann und durch Polymorphismus dynamisch entschieden werden kann, welche Form einer Funktion aufgerufen werden soll.

  1. Vergleichstabelle
  2. Definition
  3. Hauptunterschiede
  4. Fazit

Vergleichstabelle

Grundlage für den VergleichErbePolymorphismus
BasicBei der Vererbung wird eine neue Klasse unter Verwendung der Eigenschaften der bereits vorhandenen Klasse erstellt.Polymorphismus ist im Grunde eine gemeinsame Schnittstelle für mehrere Formen.
ImplementierungDie Vererbung wird grundsätzlich in Klassen implementiert.Der Polymorphismus ist im Wesentlichen auf Funktionen / Methoden implementiert.
VerwendenUnterstützung des Konzepts der Wiederverwendbarkeit in OOP und Reduzierung der Codelänge.Ermöglicht dem Objekt, zu entscheiden, welche Form der Funktion zum Zeitpunkt des Kompilierens (Überladen) sowie zur Laufzeit (Überschreiben) aufgerufen werden soll.
FormenDie Vererbung kann eine Einzelvererbung, Mehrfachvererbung, Mehrebenenvererbung, hierarchische Vererbung und Hybridvererbung sein.Polymorphismus kann ein Kompilierzeit-Polymorphismus (Überladen) oder ein Laufzeit-Polymorphismus (Überschreiben) sein.
BeispielDie Klassentabelle kann das Merkmal der Klassenmöbel erben, da eine Tabelle ein Möbel ist.Die Klasse study_table kann auch die Funktion set_color () und eine Klasse Dining_table kann auch die Funktion set_color () haben, so dass die Form der aufzurufenden set_color () -Funktion sowohl zur Kompilierungszeit als auch zur Laufzeit festgelegt werden kann.


Definition der Vererbung:

Vererbung ist eines der entscheidenden Merkmale von OOP, das die Wiederverwendbarkeit nachdrücklich unterstützt. Die Wiederverwendbarkeit kann so beschrieben werden, dass eine neue Klasse erstellt wird, 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 Mitglieder der Basisklasse zu Mitgliedern einer abgeleiteten Klasse.

Die allgemeine Form, eine Klasse zu erben, lautet wie folgt:

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

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


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

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

In Java erbt die Klasse die andere Klasse unter Verwendung des Schlüsselworts "extend". In Java wird die Basisklasse als Superklasse und die abgeleitete Klasse als Unterklasse bezeichnet. Eine Unterklasse kann nicht auf die als "privat" deklarierten Mitglieder der Basisklasse zugreifen. Die allgemeine Form, in der die Klasse in Java geerbt wird, lautet wie folgt.

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

Java unterstützt nicht die Vererbung von Mehrfachvererbung, wohingegen es mehrstufige Hierarchien unterstützt. In Java möchte eine Superklasse manchmal ihre Implementierungsdetails verbergen und macht einen Teil dieser Daten „privat“. Wie in Java kann eine Unterklasse nicht auf die privaten Mitglieder der Oberklasse zugreifen. Wenn eine Unterklasse auf diese Mitglieder zugreifen oder sie initialisieren möchte, bietet Java eine Lösung. Die Unterklasse kann die Mitglieder ihrer unmittelbaren Superklasse 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. Das erste ist, dass es verwendet wird, um den Konstruktor der Superklasse aufzurufen. Die zweite Möglichkeit besteht darin, auf das Mitglied der Oberklasse zuzugreifen, das vom Mitglied der Unterklasse ausgeblendet wurde.

// erste Form des Aufrufs des Konstruktors. class supper_class {supper_class (argument_list) {..} // Konstruktor der Superklasse}; Klasse sub_class erweitert supper_class {sub_class (argument_list) {..} // Konstruktor von sub_class super (argument_list); // Unterklasse ruft den Konstruktor der Superklasse auf}};

// Sekunde für der Superklasse supper_class {int i; } class sub_class erweitert supper_class {int i; Unterklasse (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 Kompilierungszeit als auch zur Laufzeit erreicht. Der Kompilierzeit-Polymorphismus wird durch "Überladen" erreicht, während der Laufzeit-Polymorphismus durch "Überschreiben" erreicht wird.

Der Polymorphismus ermöglicht es dem Objekt, sowohl zur Kompilierungszeit als auch zur Laufzeit zu entscheiden, welche Form der Funktion wann aufgerufen werden soll.
Lassen Sie uns das erste Konzept der Überladung diskutieren. 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 zu überladenden Funktionen Konstruktoren der Klasse.

Klassenüberladung {int a, b; public: int overload (int x) {// erster overload () -Konstruktor a = x; return a; } int overload (int x, int y) {// zweiter overload () -Konstruktor a = x; b = y; return a * b; }}; int main () {Überladung O1; O1.overload (20); // erster Aufruf des overload () -Konstruktors O1.overload (20,40); // zweiter Aufruf des overload () -Konstruktors}

Lassen Sie uns nun die zweite Form des Polymorphismus diskutieren, d. H. 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 neu definiert, mit Ausnahme des Schlüsselworts "virtual".

class base {public: virtual void funct () {// virtuelle Funktion der Basisklasse cout << "Dies ist eine Basisklasse funct ()"; }}; Klasse abgeleitet1: public base {public: void funct () {// virtuelle Funktion der Basisklasse, die in der abgeleiteten Klasse cout << "Dies ist eine abgeleitete Klasse funct ()" neu definiert wurde; }}; int main () {base * p, b; abgeleitet1 d1; * p = & b; p-> funct (); // Aufruf der Basisklasse funct (). * p = & d1; return 0; }

  1. Bei der Vererbung wird eine Klasse erstellt, deren Feature von einer bereits vorhandenen Klasse abgeleitet wird. Andererseits ist Polymorphismus eine Schnittstelle, die in mehreren Formen definiert werden kann.
  2. Vererbung ist in den Klassen implementiert, während der Polymorphismus in Methoden / Funktionen implementiert ist.
  3. Da die Vererbung es einer abgeleiteten Klasse ermöglicht, die in der Basisklasse definierten Elemente und Methoden zu verwenden, muss die abgeleitete Klasse diese Elemente oder Methoden nicht erneut definieren. Wir können also sagen, dass sie die Wiederverwendbarkeit des Codes erhöht und damit die Länge des Codes verringert . Andererseits ermöglicht es der Polymorphismus einem Objekt, zu entscheiden, welche Form der Methode es sowohl zur Kompilierungszeit als auch zur Laufzeit aufrufen möchte.
  4. Die Vererbung kann in Einzelvererbung, Mehrfachvererbung, Mehrebenenvererbung, hierarchische Vererbung und Hybridvererbung unterteilt werden. Andererseits wird Polymorphismus als überladen und übersteuert eingestuft.

Fazit:

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