На самом деле, у меня нет хорошего ответа, кроме C #, у Java нет множественного наследования, и он ДОЛЖЕН иметься.Весь смысл в том, что интерфейсы должны быть в состоянии заменить необходимость множественного наследования, похоже на большую ложь, которая, когда повторяется достаточно много раз, становится правдой.
Аргумент в том, что множественное наследование вызывает все эти проблемы, но я продолжаю слышать эти аргументы от C #, разработчиков Java, которые никогда не использовали C ++.Я также НИКОГДА не помню, чтобы программисты на С ++ говорили: «Ну и дела, я люблю С ++, но если бы они избавились только от множественного наследования, это стало бы отличным языком».Люди использовали это, когда это было практично, и не, когда это не было.
Ваша проблема - это классический случай, когда подходит множественное наследование.Любое предложение по рефакторингу кода на самом деле говорит вам, как обойти ПРОБЛЕМУ, что у C #, Java нет множественного наследования.
Также все обсуждения о том, что «да, делегирование лучше, ля-ди-да»путая религию с дизайномТам нет правильного пути.Вещи либо более полезны, либо менее полезны, и это все.
В вашем случае множественное наследование было бы более полезным и более элегантным решением.
Поскольку рефакторинг вашего кода в менее полезную форму удовлетворяет всех религиозных людей, которые никогда не использовали множественное наследование и считают, что «множественное наследование - это плохо», я думаю, вам придется понизить код, потому что я неНе вижу C #, Java "улучшается" таким образом в ближайшее время.Слишком много людей повторяют религиозную мантру до такой степени глупости, что я не вижу, чтобы она когда-либо добавлялась к языку.
... но, как вы можете видеть из решений, представленных выше, большинство людей думают, что такое решение будет СЛИШКОМ СЛОЖНЫМ И ЗАМЕДЛЕННЫМ!
Я бы предпочел сам рискнуть на территорию "x расширяет a, b", даже если это очень пугающее решение, которое может превзойти возможности большинства программистов на C #, Java.
Что еще более удивительно в предложенных выше решениях, так это то, что все присутствующие, которые предложили вам преобразовать ваш код в «делегирование» из-за плохого множественного наследования, будут, если бы столкнулись с той же самой проблемой,Решите проблему, просто выполнив: «x расширяет a, b» и покончите с этим, и все их религиозные аргументы о «делегировании против наследования» исчезнут.Вся эта дискуссия глупа, и ее продвигают только невежественные программисты, которые только демонстрируют, насколько хорошо они могут читать из книги и как мало они могут думать сами.
Вы на 100% правы, что множественное наследованиепомогите, и нет, вы делаете что-то не так в своем коде, если думаете, что C #, Java должен иметь это.