Inheritance hierarchies, interfaces, and polymorphism are different variants of the same object-oriented idea: objects can present themselves from different angles as they take one type or another. For the user of objects, only the type and not the concrete implementation plays a role.
From the developer's perspective, this idea results in a number of benefits, while the tester has to struggle with the traps of complexity hidden behind the cloak of simplicity.
This chapter discussed both the theoretical foundations for a better understanding of the problems involved in inheritance and polymorphism and techniques to solve some of these problems. These techniques include reuse of the superclass tests and testing of interfaces.