Реализация интерфейса с пустым телом - PullRequest
1 голос
/ 20 октября 2010

У меня есть такой пример использования

interface i {
   void method1();
   void method2();
}

class A implements i {
  void method1() {
     System.out.println("Method1 A ..");
  }

  void method2() {
     System.out.println("Method2 A ..");
  }
}


class B implements i {

  void method1() {
     System.out.println("Method1 B ..");
  }

  //Assume : B does not know how to implement method2
  //void method2() {

  //}
}

Я знаю, что класс B может быть абстрактным и не реализовывать method2 для интерфейса i.

Является ли общая практика тем, что если я не хочу, чтобы мой класс B был абстрактным, выбрасывал исключение из method2, если у него нет реализации для method2?

Ответы [ 4 ]

4 голосов
/ 20 октября 2010

Если вы не полностью реализуете все необходимые методы интерфейса, вам не следует реализовывать этот интерфейс.Похоже, что вы на самом деле пытаетесь сделать это:


interface top
{
   void method1(); 
}

interface next extends top
{
    void method2();
}

class A implements next
{
    public void method1()
    {
        ... something ...
    }

    public void method2()
    {
        ... something ...
    }
}

class B implements top
{
    public void method1()
    {
        ... something ...
    }
}

2 голосов
/ 20 октября 2010

Если вы не собираетесь реализовывать метод из интерфейса, вы можете выбросить исключение UnsupportedOperationException. Действительно, хотя этой ситуации следует избегать, если это возможно, возможно, переосмыслите дизайн.

1 голос
/ 20 октября 2010

Если B не знает, как реализовать method2, значит, ваш интерфейс неправильный.Вам потребуется более обобщенный интерфейс, без method2, и, возможно, расширяемый интерфейс, который содержит метод для, но который не реализован в B.

0 голосов
/ 20 октября 2010

Есть некоторые прецеденты для этого в стандартных библиотеках Java. Некоторые из наиболее заметных - это метод «remove» из интерфейса Iterator, который генерирует UnsupportedOperationException Не забудьте документировать интерфейс, чтобы сказать, что выбрасывание этого исключения допустимо.

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