251 Stimmen

Unterschied zwischen Vererbung und Komposition

Sind Zusammensetzung und Vererbung dasselbe? Wenn ich das Kompositionsmuster implementieren möchte, wie kann ich das in Java tun?

2 Stimmen

Andere damit zusammenhängende Frage: Gibt es irgendetwas, das durch Komposition nicht erreicht werden kann, was durch Vererbung möglich ist? stackoverflow.com/questions/2238642/

1 Stimmen

2 Stimmen

Dieser Artikel war für mich sehr nützlich und hilfreich: thoughtworks.com/insights/blog/

3voto

John Wilson Punkte 31

Vererbung zwischen zwei Klassen, wobei eine Klasse eine andere Klasse erweitert, legt " IS A Beziehung".

Zusammensetzung auf der anderen Seite enthält eine Instanz einer anderen Klasse in Ihrer Klasse etabliert " Hat A Beziehung". Zusammensetzung in Java ist nützlich, da es technisch die Mehrfachvererbung erleichtert.

1voto

aunte Punkte 11

Ich denke, dieses Beispiel erklärt deutlich die Unterschiede zwischen Vererbung y Zusammensetzung .

In diesem Beispiel wird das Problem durch Vererbung und Komposition gelöst. Der Autor achtet darauf, dass ; in Vererbung Eine Änderung in der Oberklasse kann zu Problemen in den abgeleiteten Klassen führen, die sie erben.

Dort können Sie auch den Unterschied in der Darstellung sehen, wenn Sie eine UML für Vererbung oder Komposition verwenden.

http://www.javaworld.com/article/2076814/core-java/inheritance-versus-composition--which-one-should-you-choose-.html

1 Stimmen

Antworten, die nur einen Link enthalten, sind nicht empfehlenswert, da sie veraltet sind. Bitte geben Sie in Ihrer Antwort zumindest die wichtigsten relevanten Informationen aus dem Link an.

1voto

Nitin Pawar Punkte 1498

Obwohl sowohl Vererbung als auch Komposition die Wiederverwendbarkeit von Code ermöglichen, besteht der Hauptunterschied zwischen Komposition und Vererbung in Java darin, dass Komposition die Wiederverwendung von Code ermöglicht, ohne ihn zu erweitern, während Sie bei Vererbung die Klasse für die Wiederverwendung von Code oder Funktionalität erweitern müssen. Ein weiterer Unterschied, der sich aus dieser Tatsache ergibt, ist, dass man mit Composition Code sogar für eine nicht erweiterbare finale Klasse wiederverwenden kann, während bei Inheritance in solchen Fällen kein Code wiederverwendet werden kann. Außerdem kann man mit Composition Code aus vielen Klassen wiederverwenden, da sie nur als Membervariable deklariert werden, während man mit Inheritance nur Code aus einer Klasse wiederverwenden kann, da man in Java nur eine Klasse erweitern kann, da Mehrfachvererbung in Java nicht unterstützt wird. In C++ kann man dies jedoch tun, da dort eine Klasse mehrere Klassen erweitern kann. Übrigens, Sie sollten immer Komposition der Vererbung in Java vorziehen nicht nur ich, sondern auch die Joshua Bloch hat in seinem Buch vorgeschlagen

2 Stimmen

Warum sollte ich "vorziehen Komposition über Vererbung "? Es handelt sich um unterschiedliche Konzepte, die für unterschiedliche Zwecke verwendet werden. Ehrlich gesagt, verstehe ich nicht, wie man vom einen zum anderen übergehen kann.

0voto

HM Nayem Punkte 1955

Komposition bedeutet, dass ein Objekt zu einer Klasse erstellt wird, das eine Beziehung zu dieser bestimmten Klasse hat. Angenommen, Student hat eine Beziehung zu Accounts;

Eine Vererbung ist, dies ist die vorherige Klasse mit dem erweiterten Merkmal. Das heißt, diese neue Klasse ist die alte Klasse mit einer erweiterten Funktion. Angenommen, Student ist Student, aber alle Studenten sind Menschen. Es gibt also eine Beziehung zwischen Student und Mensch. Dies ist Vererbung.

0voto

Vikas Kapadiya Punkte 1

Vererbung bedeutet die Wiederverwendung der kompletten Funktionalität einer Klasse. Hier muss meine Klasse alle Methoden der Superklasse verwenden und meine Klasse wird mit der Superklasse gekoppelt und der Code wird in beiden Klassen im Falle der Vererbung dupliziert.

Aber wir können von all diesen Problemen zu überwinden, wenn wir Komposition verwenden, um mit einer anderen Klasse zu sprechen. Zusammensetzung ist ein Attribut einer anderen Klasse in meine Klasse, mit der wir sprechen wollen deklariert. und was Funktionalität, die wir von dieser Klasse wollen wir durch die Verwendung dieses Attributs zu bekommen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X