У Кормака действительно отличный ответ, но я просто хочу немного рассказать о причине путаницы.
Наследование в ОО часто преподается с использованием реальных метафор, типа «яблоки и апельсины являются подклассами фруктов». К сожалению, это приводит к ошибочному убеждению, что типы в ОО должны моделироваться в соответствии с некоторыми таксономическими иерархиями, существующими независимо от программы.
Но при разработке программного обеспечения типы должны моделироваться в соответствии с требованиями приложения. Классификации в других областях обычно не имеют значения. В реальном приложении с объектами «Apple» и «Orange» - скажем, системой управления запасами для супермаркета - они, вероятно, вообще не будут отдельными классами, а такие категории, как «Фрукты», будут скорее атрибутами, чем супертипами.
Проблема круга-эллипса - красная сельдь. В геометрии круг - это специализация эллипса, но классы в вашем примере не являются геометрическими фигурами. Важно отметить, что геометрические фигуры не являются изменчивыми. Они могут быть преобразованы , хотя, но тогда круг может быть преобразован в многоточие. Таким образом, модель, в которой окружности могут изменять радиус, но не изменяться на многоточие, не соответствует геометрии. Такая модель может иметь смысл в конкретном приложении (скажем, инструмент для рисования), но геометрическая классификация не имеет отношения к тому, как вы проектируете иерархию классов.
Так должен ли Круг быть подклассом Эллипса или наоборот? Это полностью зависит от требований конкретного приложения, которое использует эти объекты. Приложение для рисования может иметь различные варианты обработки кругов и эллипсов:
Обрабатывайте круги и эллипсы как отдельные типы фигур с различным пользовательским интерфейсом (например, две ручки изменения размера на многоточии, одна ручка на круге). Это означает, что вы можете иметь эллипс, который геометрически является кругом, но не кругом с точки зрения приложения.
Обрабатывайте все эллипсы, включая кружки, одинаково, но есть возможность «зафиксировать» x и y на одном значении.
Эллипсы - это просто круги, где применяется масштабное преобразование.
Каждый возможный дизайн приведет к различной модели объекта -
В 1 - ом случае, Круг и эллипсы будут двойников классы
Во 2-м классе не будет отдельного класса Circle.
В третьем классе не будет отдельного класса Ellipse. Таким образом, так называемая проблема круг-эллипс не входит в картину ни в одном из них.
Таким образом, чтобы ответить на поставленный вопрос: должен ли круг расширять эллипс? Ответ: это зависит от того, что вы хотите с ним делать. Но, вероятно, нет.