Warum Vererbung überhaupt verwenden? [geschlossen

Ich weiß, die Frage wurdediscussed before, aber es scheint immer unter der Annahme, dass Vererbung der Komposition zumindest manchmal vorzuziehen ist. Ich möchte diese Annahme in Frage stellen, um Verständnis zu erlangen.

Meine Frage lautet:Schon sei Sie können mit der Objektzusammensetzung alles erreichen, was Sie mit der klassischen Vererbung erreichen können.und sei klassische Vererbung wird sehr oft missbraucht [1]und sei Objektzusammensetzung gibt Ihnen die Flexibilität, die Laufzeit des delegierten Objekts zu ändern. warum würdest duj klassische Vererbung verwenden?

Ich kann irgendwie verstehen, warum Sie die Vererbung in einigen Sprachen wie Java und C ++ empfehlen, die keine bequeme Syntax für die Delegierung bieten. In diesen Sprachen können Sie viel Tipparbeit sparen, indem Sie die Vererbung verwenden, wenn dies nicht eindeutig falsch ist. Andere Sprachen wie Objective C und Ruby bieten jedoch beide klassische Vererbung aun Sehr praktische Syntax für die Delegation. Die Programmiersprache Go ist meines Wissens die einzige Sprache, die entschieden hat, dass die klassische Vererbung mehr Probleme bereitet als sie sich lohnt, und unterstützt nur die Delegierung für die Wiederverwendung von Code.

Auch wenn Sie wissen, dass die klassische Vererbung nicht falsch ist, um ein bestimmtes Modell zu implementieren, reicht dieser Grund aus, um es anstelle der Komposition zu verwenden?

[1] Viele Leute verwenden die klassische Vererbung, um Polymorphismus zu erreichen, anstatt ihre Klassen eine Schnittstelle implementieren zu lassen. Der Zweck der Vererbung ist die Wiederverwendung von Code, nicht der Polymorphismus. Darüber hinaus verwenden einige Leute die Vererbung, um ihr intuitives Verständnis einer "Ist-Eine" -Beziehung zu modelliere was oft problematisch sein kann.

Aktualisiere

Ich möchte nur klarstellen, was ich genau meine, wenn ich über Vererbung spreche:

Ich rede überdie Art der Vererbung, bei der eine Klasse von einer teilweise oder vollständig implementierten Basisklasse erbt. Ich binnich Ich spreche über das Erben von einer rein abstrakten Basisklasse, was dem Implementieren einer Schnittstelle gleichkommt, gegen die ich nicht argumentiere.

Update 2

Ich verstehe, dass Vererbung der einzige Weg ist, um Polymorphismus in C ++ zu erreichen. In diesem Fall ist es offensichtlich, warum Sie es verwenden müssen. Meine Frage beschränkt sich daher auf Sprachen wie Java oder Ruby, die unterschiedliche Möglichkeiten zur Erzielung von Polymorphismus bieten (Schnittstellen bzw. Typisierung von Enten).

Antworten auf die Frage(26)

Ihre Antwort auf die Frage