Может ли реализованный класс иметь методы, НЕ объявленные в его родительском интерфейсе? - PullRequest
0 голосов
/ 15 марта 2012

Я пробовал это в Eclipse, и это показывает ошибку компиляции.Однако попытка того же в онлайн-среде IDE Compilr не выявила никаких ошибок.Вот почему путаница.

interface Iclass{
  void print();
  void hey();
}

class sdlfkajl implements Iclass {
  public void print(){
    System.out.println("Impl class");
  }
  public void  hey(){
    System.out.println("Hey!");
  }
  public void extra(){
    System.out.println("Should I be here?");
  }
}

Показанная ошибка заключается в том, что этот класс не может иметь методы, не объявленные в интерфейсе.Во всплывающей подсказке говорится, что я должен объявить этот метод и в интерфейсе.

Ответы [ 7 ]

6 голосов
/ 15 марта 2012

Может ли реализованный класс иметь методы, НЕ объявленные в его родительском интерфейсе?

Да, может.

Я не знаю, в чем проблема в вашем случае, но дело не в этом.

1 голос
/ 15 марта 2012

В вашем коде нет ошибок.

Возможно, вы ошибочно приняли предупреждение за ошибку - IntelliJ может быть установлен, чтобы пометить код выше как предупреждение.

У вас также может быть параметр для предупреждений о сбое компиляции.

Проверьте настройки IDE!

0 голосов
/ 08 октября 2013

Вам разрешено добавлять методы в класс, которые не объявлены в интерфейсе этого класса.

Я регулярно использую Eclipse и думаю, что проблема, с которой вы сталкиваетесь, связана с самим Eclipse, а не с вашим кодом. Иногда, когда вы изменяете и сохраняете интерфейс, Eclipse будет отображать ошибку в строке, где было сделано изменение.

Попробуйте удалить весь измененный метод и заново набрать или вставить код на место. Это должно заставить Eclipse обновить соответствующее рабочее пространство и устранить ошибку.

0 голосов
/ 15 марта 2012

Я пытался воспроизвести тот же сценарий, но он отлично работает на моем конце. Попробуйте очистить код, может, это работает.Может быть, это будет проблема видимости интерфейса

0 голосов
/ 15 марта 2012

Единственная ошибка, которую я вижу, вы получаете, если ваш интерфейс и ваша реализация находятся в разных пакетах. Ваш интерфейс имеет видимость по умолчанию (он же «пакет приватный»), что означает, что его можно увидеть (и использовать) только в одном пакете. Попробуйте объявить ваш интерфейс общедоступным вместо

public interface Iclass {
}

Кроме этого, наличие методов в классе, которые не указаны в интерфейсе, совершенно допустимо в Java. Интерфейс - это контракт, методы, которые вы ДОЛЖНЫ реализовать. Это не только для тех, кто.

0 голосов
/ 15 марта 2012

У implemented class, конечно, могут быть методы, НЕ объявленные в interface.Но обязан реализовывать методы, которые объявлены в interface, если только он не объявлен abstract.

0 голосов
/ 15 марта 2012

Я не знаю, какую ошибку вы получили, но вам разрешено добавлять дополнительные методы для реализации интерфейса.

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