путаница в реализации интерфейса? - PullRequest
2 голосов
/ 21 августа 2011

Я вижу код, в котором есть два интерфейса, имеющие несколько методов с двумя методами, имеющими одинаковое имя.Тогда есть класс, который реализует эти интерфейсы, я думаю, он не должен был компилироваться из-за неоднозначности в именах методов.Почему работает нормально.

Ответы [ 2 ]

2 голосов
/ 21 августа 2011

Каждый язык, на котором может возникнуть эта проблема, решит проблему по-своему. В некоторых языках это может быть ошибкой; С ++ это так. Но в Java, если оба метода имеют совместимые спецификации исключений, т. Е. Если на самом деле можно реализовать метод, удовлетворяющий обоим интерфейсам, это определенно разрешено спецификацией языка. Один метод удовлетворяет каждому интерфейсу, и все в порядке. Бессмысленно спрашивать, к какому интерфейсу принадлежит метод; он принадлежит обоим или никому.

Обратите внимание, что вы можете создать класс с методом x(), а затем расширить этот класс дочерним классом, который объявляет себя для реализации некоторого интерфейса, который включает метод x(); дочерний процесс автоматически удовлетворяет интерфейс, используя унаследованный метод, который сам был объявлен без какого-либо знания об интерфейсе. Как видите, интерфейсы Java являются чисто декларативными; им все равно, откуда берется этот метод, только то, что этот класс включает их.

Я не могу говорить за PHP, но, возможно, он такой же, но я уверен, что он отличается некоторыми мелкими деталями.

0 голосов
/ 21 августа 2011

В именах методов нет двусмысленности, если методы одинаковы.

Итак, по сути, в Java нет проблем, поскольку реализующий класс должен обеспечивать только одну реализацию.

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