При создании нового класса, наследующего свойства и методы своего предка, вы рассчитываете на возможность переопределить часть методов, вложив в них новые или слегка подкорректированные функциональные возможности своего класса. Такое решение полностью соответствует концепции объектно-ориентированного программирования и основывается на полиморфизме. Но полиморфизм, как один из столпов ООП, может существовать только при условии, что в родительском классе заложен механизм изменения поведения дочернего класса.
Практически весь набор компонентов из библиотеки VCL Delphi предусматривает возможность переопределять поведение методов в своих потомках, но, к сожалению, более половины компонентов сторонних разработчиков не допускают дальнейшего совершенствования своих библиотек. Причин тому две. Первая - это желание сохранить свои авторские права в каком-то приоритетном направлении. Такое решение спорно, но во всяком случае является личным делом программиста.
Вторая причина гораздо прозаичнее. Компоненты-наследники утрачивают способность использовать преимущества полиморфизма из-за непрофессио-
нального объявления разработчиком типа методов. Вот с этим надо бороться, для чего при создании компонента особое внимание стоит уделять статическим (static), виртуальным (virtual) и динамическим (dynamic) методам. Кстати, последние два метода могут быть абстрактными (abstract).