Cormac tem uma resposta realmente ótima, mas eu só quero elaborar um pouco sobre o motivo da confusão em primeiro lugar.
A herança em OO geralmente é ensinada usando metáforas do mundo real, como "maçãs e laranjas são subclasses de frutas". Infelizmente, isso leva à crença equivocada de que os tipos de OO devem ser modelados de acordo com algumas hierarquias taxonômicas existentes independentemente do programa.
Porém, no design de software, os tipos devem ser modelados de acordo com os requisitos do aplicativo. Classificações em outros domínios são geralmente irrelevantes. Em uma aplicação real com objetos "Apple" e "Orange" - digamos, um sistema de gerenciamento de inventário para um supermercado - eles provavelmente não serão classes distintas, e categorias como "Frutas" serão atributos e não supertipos.
O problema da elipse circular é um arenque vermelho. Na geometria, um círculo é uma especialização de uma elipse, mas as classes no seu exemplo não são figuras geométricas. Fundamentalmente, figuras geométricas não são mutáveis. Eles podem ser transformados , mas um círculo pode ser transformado em uma elipse. Portanto, um modelo em que os círculos podem alterar o raio, mas não as reticências, não corresponde à geometria. Esse modelo pode fazer sentido em um aplicativo específico (por exemplo, uma ferramenta de desenho), mas a classificação geométrica é irrelevante para a maneira como você projeta a hierarquia de classes.
Então, Circle deve ser uma subclasse de Ellipse ou vice-versa? Depende totalmente dos requisitos do aplicativo em particular que utiliza esses objetos. Um aplicativo de desenho pode ter diferentes opções em como tratar círculos e elipses:
Trate círculos e elipses como tipos distintos de formas com diferentes interfaces de usuário (por exemplo, duas alças de redimensionamento em uma elipse, uma alça em um círculo). Isso significa que você pode ter uma elipse que é geometricamente um círculo, mas não um círculo da perspectiva do aplicativo.
Trate todas as elipses, incluindo círculos da mesma forma, mas tenha a opção de "travar" x e y com o mesmo valor.
Elipses são apenas círculos nos quais uma transformação de escala foi aplicada.
Cada design possível levará a um modelo de objeto diferente -
No 1º caso, Circle e Ellipses serão irmãos classes
No segundo, não haverá nenhuma classe Circle distinta
No terceiro, não haverá uma classe Ellipse distinta. Portanto, o chamado problema da elipse circular não aparece na imagem em nenhum deles.
Então, para responder à pergunta da seguinte maneira: O círculo deve estender a elipse? A resposta é: depende do que você quer fazer com isso. Mas provavelmente não.