Cormac hat eine wirklich gute Antwort, aber ich möchte nur kurz auf den Grund für die Verwirrung eingehen.
Die Vererbung in OO wird oft mit realen Metaphern gelehrt, wie "Äpfel und Orangen sind beide Unterklassen von Früchten". Leider führt dies zu der falschen Annahme, dass Typen in OO gemäß einigen taxonomischen Hierarchien modelliert werden sollten, die unabhängig vom Programm existieren.
Beim Softwaredesign sollten die Typen jedoch gemäß den Anforderungen der Anwendung modelliert werden. Klassifizierungen in anderen Bereichen sind normalerweise irrelevant. In einer tatsächlichen Anwendung mit "Apple" - und "Orange" -Objekten - beispielsweise einem Bestandsverwaltungssystem für einen Supermarkt - werden sie wahrscheinlich überhaupt keine unterschiedlichen Klassen sein, und Kategorien wie "Obst" werden eher Attribute als Supertypen sein.
Das Kreisellipsenproblem ist ein roter Hering. In der Geometrie ist ein Kreis eine Spezialisierung einer Ellipse, aber die Klassen in Ihrem Beispiel sind keine geometrischen Figuren. Entscheidend ist, dass geometrische Figuren nicht veränderbar sind. Sie lassen sich verwandelt , wenn auch, aber dann ein Kreis kann in eine Ellipse verwandelt werden. Ein Modell, bei dem Kreise den Radius ändern können, sich jedoch nicht in eine Ellipse ändern, entspricht also nicht der Geometrie. Ein solches Modell kann in einer bestimmten Anwendung (z. B. einem Zeichenwerkzeug) sinnvoll sein, die geometrische Klassifizierung ist jedoch für die Gestaltung der Klassenhierarchie unerheblich.
Sollte Circle also eine Unterklasse von Ellipse sein oder umgekehrt? Es hängt ganz von den Anforderungen der jeweiligen Anwendung ab, in der diese Objekte verwendet werden. Eine Zeichenanwendung kann verschiedene Möglichkeiten zur Behandlung von Kreisen und Ellipsen haben:
Behandeln Sie Kreise und Ellipsen als unterschiedliche Arten von Formen mit unterschiedlicher Benutzeroberfläche (z. B. zwei Ziehpunkte zur Größenänderung auf einer Ellipse, ein Ziehpunkt auf einem Kreis). Dies bedeutet, dass Sie eine Ellipse haben können, die aus Sicht der Anwendung geometrisch ein Kreis, aber kein Kreis ist.
Behandeln Sie alle Ellipsen einschließlich der Kreise gleich, aber haben Sie die Option, x und y auf den gleichen Wert zu "sperren".
Ellipsen sind nur Kreise, in denen eine Skalierungstransformation angewendet wurde.
Jedes mögliche Design führt zu einem anderen Objektmodell -
Im ersten Fall werden Kreis und Ellipsen sein Geschwister Geschwisterklassen
In der zweiten Klasse wird es überhaupt keine eigene Circle-Klasse geben
In der dritten Klasse wird es keine eindeutige Ellipse-Klasse geben. Das so genannte Kreisellipsenproblem taucht in keinem von diesen auf.
Um die gestellte Frage zu beantworten: Soll der Kreis die Ellipse erweitern? Die Antwort lautet: Es kommt darauf an, was Sie damit machen wollen. Aber wahrscheinlich nicht.