Nemohou, protože čtverec není obdélník a kružnice není elipsa. Jsou to sourozenci mající společné rodiče.
Pokud tvrdíš, že nějaké entity "jsou sourozenci", tak implicitně používáš nějaké uspořádání. Jaké? Jsi si jistý, že ten, proti komu argumentuješ, nepracuje s nějakým jiným uspořádáním? Nemíjíte se právě proto?
Je tedy správné se zeptat: V jakém kontextu chceš srovnávat čtverec a obdélník? Podle geometrické definice je čtverec skutečně speciálním případem obdélníku. Jenže je ten geometrický kontext skutečně tím kontextem, který chceme používat v aplikaci?
Podle mě totiž v tomhle je doopravdy ten zakopaný pes: každá OOP učebnice pracuje s tím, že to uspořádání je to, co intuitivně můžeme nazvat "obecnost" (pojmu): Žárovka je Svítidlo, Pes je Savec atd. A všechny tyhle přiblblé debaty pramení z toho, že tohle uspořádání sice výborně funguje v teorii, na ideálních příkladech, ale v praxi máš jiná kritéria => jiné uspořádání => jinou hierarchii.
Že Pes je Savec, to víme všichni a je to i v učebnicích OOP. Opět záleží na kontextu - někdy to prostě platit nemusí. Například hot dog není savec.
Nebo snad umíš precizně a jednoznačně nadefinovat jediné správné uspořádání objektů, které by vytvořilo tu jedinou správnou hierarchii dědičnosti?
Ne, to nelze. Mohu však nadefinovat v požadovaném kontextu, zda je vazba rodičovská, sourozenecká nebo žádná. Vždy se dopustíme nějaké nepřesnosti, ale rozhodující je, zda nám v daném kontextu pomůže ve vývoji nebo nám naopak bude házet klacky pod nohy.
Výrok "1+1=2" přece také neplatí vždy, ale pouze v určitém oboru matematiky. Stejně tak i tvrzení, že čtverec je obdélník, platí jen v určitém oboru geometrie. Nelze je bezhlavě aplikovat v každém kontextu. Proto když tvrdím, že čtverec není obdélník, snažím se tím vymanit ze skrytých závislostí, které by mi mohly způsobit bolení hlavy například v kreslicím programu.