When you design a class hierarchy, you are defining a structure which by definition should remain intact. If you make a change to a particular class, the change should be reflected in any of its subclass or any composite class using that class as one of its properties. If a change you are about to make to a class may have a negative effect on existing related classes, that is probably a sign that you need to create a new subclass rather than change the existing one. Classes should relate in an abstract way, meaning you should not have to know how they work internally in order to use or interface to them.