Hezké ... ale k čemu je to dobré? Na jednu stranu čtu, že se někdo vyhýbá dědičnosti jako čert kříži, z druhé strany mi zase někdo vnucuje čtverec jako potomka obdélníku. Nevidím důvod, proč bych měl zavádět dědičnost mezi třídami, u kterých jsou pochybnosti o paternitě a dokonce ani není problém vytvořit nového (abstraktního) předka či rozhraní pro všechny zmíněné třídy.
Třeba proto, že všechno, co platí pro obdélník, platí i pro čtverec? Když budu chtít spočítat úhlopříčku nebo obsah, proč bych to měl pro čtverec implementovat znova? Proč má uživatel mého kódu tam, kde chci na vstupu obdélník, vytvářet nový obdélník podle zadaného čtverce, místo toho, aby využil toho, že čtverec je zároveň i obdélník?
V tomhle případě nemůžu přidávat žádné třídy dodatečně. Buď bude z rozhraní obdélníka jasné, že za ním může být schovaný i čtverec, nebo z toho bude ohavná past.
Co je špatného na tom, když ten obdélník bude mít metody
setStranaA() a
setStranaB()? Jak se z toho pozná, že za tím může být schovaný i čtverec? Je snad něco, co můžete udělat s obdélníkem, ale ne se čtvercem? Čtverec je speciální případ obdélníku, takže všude tam, kde je očekáván obdélník, musí být možné předat i čtverec.