Ну во первых интерфейсы нельзя наследовать их можно имплементировать.
Далее вы сказали
Предположим, мне надо создать класс D, в котором M1 содержит реализацию класса A, а метод M2 реализацию класса B.
Как он может содерживать реализацию класса А если А это интерфейс и в нем нет реализации. Ну если вам нужно описать свою реализацию метода М1, а чтобы М2 было как у класса В. Тогда наследуйте D от В, и сдеайте override метода М1
Предположим, мне надо создать класс D, в котором M1 содержит реализацию класса A, а метод M2 реализацию класса B.
Подобные проблемы возникают как правило из-за неверно спроектированных классов, в частности когда классы "берут на себя слишком много". Вам стоит описать хотя бы в общих словах что у Вас за классы и методы
не зная как так получилось)
Возможно из-за перегруженного интерфейса. ( очень важно придерживаться тонких интерфейсов. например интерфейс M1 интерфейс M2)
Но разрешить (возможно) так
D реализует интерфейс, но делегирует выполнение M1 классу B, M2 классу C
т.е. шаблон делегирование