Наследование позволяет создавать новый класс на основе существующего. При наследовании в производный класс добавляются новые поля и новые методы, некоторые методы класса родителя изменяются. При этом не затрагивается код класса родителя, т.е. повторно используется старый код. Старый код используется и при агрегации, включении в качестве полей объектов других классов. От множественного наследования можно отказаться без потери функциональности при сочетании наследования с агрегацией. В каких случаях надо использовать наследование, а каких – агрегацию? Ответ может быть получен с опорой на здравый смысл, а точнее на концептуальную модель. Есть общие правила: при наследовании происходит расширение возможностей, конкретизируется поведение, но не изменяется типизация объекта, когда можно сказать об объекте дочернего класса, что он есть объект родительского класса.

Глагол ЕСТЬ определяет наследование. ИМЕЕТ, ВКЛЮЧАЕТ, СОДЕРЖИТ – агрегацию. Классы наследники называются часто ПОДКЛАССАМИ, а родительские – НАДКЛАССАМИ. Термин подкласса кажется неестественным, если не знать ничего о моделировании, так как дочерние классы содержат все члены родительского ну и свои некоторые. НО дочерний класс – конкретизирует родительский, объекты дочернего класса можно рассматривать как объекты родительского класса. Множество Волков является подмножеством Псовых.