2014-11-04 4 views
0

Просто небольшое замешательство. Java не допускает множественного наследования. Тогда как интерфейс может расширять несколько интерфейсов? Можем ли мы назвать это наследование?Множественное наследование интерфейсов

+0

Хм ... может быть с Java 8, где вы можете предоставить стандартные методы для интерфейсов. Поскольку класс может реализовывать более одного интерфейса, мы имеем что-то вроде множественного наследования. – sk2212

+0

Реализация нескольких интерфейсов - ** полиморфизм ** не ** наследование **. – Dmytro

+0

@Dmytro Это неверно. Тип наследует всех публичных членов его супертипов. Это включает в себя все определения методов, вложенные типы и «статические» члены класса и типы интерфейсов. –

ответ

0

Интерфейс, расширяющий несколько интерфейсов, не является множественным наследованием. Поскольку вы не наследуете никаких функций.

public interface A { 
    public void doSomething(); 
} 

public interface B { 
    public void doSomething(); 
} 

public interface C extends A, B { 

} 

абсолютно нормально, так как вы в конечном итоге с помощью единого интерфейса с (эффективно) одним способом:

public interface C extends A, B { 
    public void doSomething();  
} 
+0

Спасибо, но предположим, что интерфейс A и B содержит два разных метода (например, m1 и m2). Так как C расширяет оба интерфейса, он также будет иметь как m1, так и m2. Следовательно, хотя C не расширяет какую-либо функциональность, он все же приобретает поведение A и B. Тогда как это оправдано. – Leo

+0

@Leo: Это оправдано, потому что это не вызывает традиционные проблемы, связанные с множественным наследованием. Вы расширяете контракт для интерфейса, не наследуя поведение от класса. – StuPointerException

Смежные вопросы