2015-05-13 3 views
2

В интервью есть два интерфейса B и C, каждый из которых имеет один и тот же метод public m1() класс A реализует B и C, если класс A должен реализовать метод m1, реализованный метод имел бы интерфейс.несколько интерфейсов, имеющих тот же метод, который, наконец, реализован классом

в то время я также был смущен, что, какой метод будет называться пожалуйста, вы можете посоветовать

public interface A { 

public void show(); 
} 

public interface B { 

public void show(); 
} 

public class Test implements A, B { 

public static void main(String[] args) { 

A a; 
B b; 
Test t = new Test(); 
a = t; 
a.show(); 
b = t; 
b.show(); 

} 

ответ

4

В Java, оба интерфейса перекрываются, и есть только один способ. Невозможно предоставить две отдельные реализации (или выбрать тот, который вы хотите). Если два определения метода интерфейса имеют несовместимые типы возврата, класс не может одновременно расширять оба интерфейса.

Таким образом, как a.show(), так и b.show() вызовет тот же самый метод.

В C# вы можете устранить двусмысленность.

1

Вам необходимо будет реализовать show в классе Test.

Вы сможете реализовать его только один раз в классе Test.

Помните, что интерфейсы не могут по определению предоставлять стандартную реализацию show.

Поэтому, когда вы создаете экземпляр класса Test, метод show будет иметь только одну реализацию во время выполнения. Это будет та же реализация, даже если объекты имеют два разных родительских интерфейса.

+0

«Интерфейсы не могут по определению обеспечить реализацию по умолчанию». Это все еще верно в Java8? – Thilo

+0

Вы можете попробовать, если вы не уверены, но это правда (иначе они будут абстрактными классами или обычными классами). – tim

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