Eclipse показывает отсутствующие методы интерфейса в дочернем классе, а не в родительском классе - PullRequest
0 голосов
/ 01 марта 2011

В Eclipse, почему отсутствуют методы интерфейса, показанные в дочернем классе, а не в родительском классе?

Допустим, у меня простой интерфейс:

public interface ISpeaks {
  String talk();
}

Затем у меня реализован этот интерфейс для расширенного класса:

public abstract class Cat implements ISpeaks {
  // forgot to implement talk()
}

public class Tiger extends Cat {
  // also didn't implement talk()
}

Затмение жалуется, что Тигру не хватает метода talk () (точная ошибка: The type Tiger must implement the inherited abstract method ISpeaks.talk()). Я ожидаю, что это скажет мне, что Cat отсутствует talk (), потому что Cat - это класс, который явно реализует интерфейс. Не Тигр.

Это определенно "бух?" момент для меня, потому что я нахожусь в Spring / Hibernate и всякий раз, когда я добавляю метод к своим интерфейсам DAO, я получаю такую ​​ошибку для каждого тестового примера с поддержкой базы данных, в котором отсутствует метод - вместо того, чтобы получить одну ошибку на базовый метод тестирования, который издевается над моими DAO.

1 Ответ

9 голосов
/ 01 марта 2011

Поскольку класс Cat является абстрактным, вам не нужно реализовывать все методы интерфейса.

Вам нужно будет реализовать все методы интерфейса только для конкретных классов, которые реализуют ISpeaks, например Tiger.

Это логично, поскольку нет способа создать экземпляр объекта типа Cat, поэтому нет способа создать объект, который не полностью реализует интерфейс.

Аналогичный пример приведен в последнем абзаце http://download.oracle.com/javase/tutorial/java/IandI/abstract.html

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