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