ОК, посмотрим, понял ли я ваш вопрос ...
Я думаю, что вы не уверены в различиях и / или сходствах между использованием интерфейсов и абстрактных классов. Если в этом проблема, то вот мое резюме "стартер для 10";
Абстрактные классы не могут быть созданы , , но могут содержать детали реализации , поэтому при получении класса из него вы получаете контракт и любое поведение по умолчанию, которое вы помещаете в абстрактный класс. Например, ваш класс Person (я предполагаю, что это абстрактный класс для этого примера) будет определять контракт, который должен (как минимум) иметь производный класс Employee или Manager, но также может обеспечивать некоторое поведение по умолчанию.
Интерфейсы с другой стороны указывают только контракт ; что должны делать реализующие классы, они не могут обеспечить какой-либо способ реализации . Например, если «Person» в вашем примере был на самом деле интерфейсом, он должен определить, какие классы, его реализующие (сотрудник и менеджер), должны выполнять, но не может предоставить реализацию по умолчанию для этого контракта.
Также обратите внимание, что во многих языках (Java, C #, Delphi) вы можете наследовать только от одного родительского класса, но можете реализовать много интерфейсов.