a ze pak lze vytvaret hierarchii potomku a usetrit si tak psani kodu.
Code reuse dědičností se považuje za antipattern.
Inheritance, if you look at it with a very jaded eye, inheritance is the declaration of methods and variables in a subscope and it has nothing to do with ISA whatever. 
Je to o úhlu pohledu. Tohle má moje větší sympatie.
Vsak to IS-A v OOP světě znamená kompatibilní parametry, návratové hodnoty a invarianty. Tvrzení o nějakých zásadních podobnostech s objekty reálného světa patří tak do říše pohádek pro korporátní konzultanty.
Pokud má předek smysl sám o sobě, tak by potomek neměl nějak zákeřně měnit chování. To vlastně nevychází přímo z dědičnosti. Je to IMO důsledek nenápadného implicitního přetypování. Pokud toho přetypování dosáhnu jinak (třeba operátorem přetypování v c++), tak mám vlastně úplně stejnou situaci.