Как правило, наследование следует использовать только в том случае, если ваши объекты относятся к одному и тому же объекту.Если это так, то вы можете использовать наследование для совместного использования реализации, которая присуща определению базового объекта.
Если классы a, b, c и d на самом деле не являются разными видами одного и того же объекта, товы можете попытаться инкапсулировать их общие функциональные возможности во внутренний объект, на который ссылаются.
public class a
{
private CommonFunctionalityClass commonFunc;
public a()
{
this.commonFunc = new CommonFunctionalityClass();
}
}
Когда вы хотите выполнить обычные вещи, вы просто вызываете свой экземпляр commonFunc.Вы можете сделать ту же инкапсуляцию для a / b, b / c и c / d, где вы делитесь функциональностью через a, имеет отношение, используя объект с внутренней ссылкой.Таким образом, вы не дублируете код, но можете гибко делиться функциональностью.