A basic criterion for a proper relationship between a
class and a
derived class.
A fundamental goal of
Object-Oriented programming is facilitating
code reuse by creating general-purpose classes, then deriving from these more special-purpose classes which are "like" another class "except for" additional characteristics or functionality.
Therefore, having a "cat" class which derives from an "animal" class passes the test; a cat "is-a" animal, and inheritance is useful here.
Creating an "engine" class which derives from the "animal" class would be conceptually and practically useless; the entities are so different that all attributes of the derived class would have to be implemented distinctly. This inheritance fails the "is-a" test.