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.