Cormac справді чудова відповідь, але я просто хочу трохи детальніше пояснити причину плутанини.
Наслідування в OO часто навчають за допомогою метафор реального світу, наприклад "яблука та апельсини - це підкласи фруктів". На жаль, це призводить до помилкової думки, що типи в ОО повинні моделюватися відповідно до деяких таксономічних ієрархій, що існують незалежно від програми.
Але при розробці програмного забезпечення типи повинні моделюватися відповідно до вимог програми. Класифікації в інших областях зазвичай не мають значення. У реальній програмі з об'єктами "Apple" та "Orange" - скажімо, система управління запасами для супермаркету - вони, ймовірно, зовсім не будуть окремими класами, а категорії типу "Fruit" будуть атрибутами, а не супертипами.
Проблема кола-еліпса - це червона оселедець. У геометрії коло - це спеціалізація еліпса, але класи у вашому прикладі не є геометричними фігурами. Принципово важливо, що геометричні фігури не змінюються. Вони можуть хоч і трансформуватися , але тоді коло можна перетворити на еліпсис. Отже модель, коли кола можуть змінювати радіус, але не змінюватися на еліпсис, не відповідає геометрії. Така модель може мати сенс у певній програмі (скажімо, інструмент малювання), але геометрична класифікація не має значення для того, як ви розробляєте ієрархію класів.
То чи повинен Circle бути підкласом Еліпса чи навпаки? Це повністю залежить від вимог конкретної програми, яка використовує ці об'єкти. Додаток для малювання може мати різний вибір способів поводження з колами та еліпсами:
Розглядайте кола та еліпси як окремі типи фігур із різним інтерфейсом (наприклад, дві ручки розміру на еліпсісі, одна ручка на колі). Це означає, що ви можете мати еліпс, який геометрично є колом, але не Колом з точки зору програми.
Обробляйте всі еліпси, включаючи кола однакові, але у них є можливість "заблокувати" x і y на одне значення.
Еліпси - це лише кола, де застосовано масштабну трансформацію.
Кожна можлива конструкція призведе до різної моделі об'єкта -
У 1-му випадку «Коло» та «Еліпси» будуть класами побратимів
У другому взагалі не буде окремого класу Circle
У третьому не буде окремого класу Еліпса. Тож так звана проблема кола-еліпса не входить у малюнок ні в одному із них.
Отже, щоб відповісти на поставлене запитання: Чи повинен круг подовжувати еліпс? Відповідь: Це залежить від того, що ви хочете зробити з цим. Але, мабуть, ні.