Почему Java позволяет интерфейсу расширять другой интерфейс прямо или косвенно? - PullRequest
0 голосов
/ 01 мая 2020

Java позволяет компилировать следующий код. Извините за наименование. Я бы выбрал лучшие имена, если бы знал, зачем писать этот код, но это и есть причина моего вопроса. Обратите внимание, что IFace3 расширяет IFace1 как прямо, так и косвенно (через IFace2). Есть ли практическое применение этой возможности?

public interface IFace1 {
    public void meth1();
}

interface IFace2 extends IFace1 {
    public void meth2();
}

interface IFace3 extends IFace1, IFace2 {
     public void meth3();
}

1 Ответ

0 голосов
/ 01 мая 2020

Ситуация, когда множественное наследование вызывает проблемы, заключается в том, что член определяется по-разному на разных путях наследования. По крайней мере, за несколько дней до того, как Java разрешил реализации интерфейса по умолчанию в середине иерархии, невозможно было определить часть интерфейса конфликтующим образом на разных путях наследования, поскольку фактическая реализация каждого члена интерфейса будет должны содержаться в классе, который его реализует. Даже если интерфейс включает в себя Interface1.Method1 как напрямую, так и через Interface2, один и тот же метод в реализующем классе будет использоваться для удовлетворения членов обоих интерфейсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...