Наследование - это весело, но его следует использовать как последнее средство. Я не говорю, что вы не можете сделать это так, как делали - ваше решение полностью оправдано, но просто предложить альтернативу ...
Что если бы у вас был «DataClass», в котором вы могли бы установить объект processData (или нет). Объект processData фактически будет интерфейсом с единственным методом "processData".
Когда вы вызываете getData, это может выглядеть примерно так:
if(processDataObject == null)
return getInformation();
else
return processDataObject.processData(getInformation());
Черт, если у вас есть определенный объект processData "passthrough", который ничего не делает и использует его в качестве "processDataObject" по умолчанию, тогда весь метод getData становится:
return processDataObject.processData(getInformation());
Это позволило бы динамическому созданию классов выполнять любой тип обработки, который вы хотите - Это упростит вещи, которые вы строите поверх этого проекта.
Этот стиль дизайна занял у меня некоторое время, чтобы прийти к соглашению, и вам может не понравиться идея сначала избежать наследования, я просто прошу вас подумать об этом. В наши дни мое наследование довольно редко, и когда я им пользуюсь, оно всегда на очень мелких деревьях.