Так действительно ли А нужно изменить? Разве D не может просто переопределить функцию, которую он хочет изменить?