Я согласен с JeeBee: рассмотрите возможность реализации ваших вспомогательных методов где-нибудь, кроме абстрактного базового класса.
Если ваш вспомогательный метод commonY () существует только в абстрактном базовом классе B, все классы, которые реализуют интерфейс A, должны будут также расширять базовый класс B, чтобы воспользоваться преимуществами этой реализации commonY (). Но вы не всегда можете быть вынуждены продлить класс B.
Кроме того, что если вы захотите изменить реализацию commonY () в будущем? Затем вы будете влиять на множество реализаций интерфейса А. Но если вы не контролируете все эти реализации интерфейса А, вы можете повлиять на их функциональность (плохим образом), не намереваясь.
Использование абстрактного базового класса в этой ситуации может просто отнять некоторую гибкость, не давая вам ничего взамен.