Реализуйте методы интерфейса, которые ничего не делают - PullRequest
4 голосов
/ 12 августа 2011

Допустим, у меня есть этот интерфейс и класс:

interface IListener
{
   void f();
   void g();
   void h();
}

class Adapter implements IListener
{
   void f() {}
   void g() {}
   void h() {}
}

Какой смысл реализовывать методы интерфейса thoose, если они ничего не делают?

Вопрос взят из Шаблоны проектирования Java Workbook .

Ответы [ 2 ]

10 голосов
/ 12 августа 2011

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

Например, в Swing при реализации MouseListener может не потребоваться обрабатывать все события мыши. В этом случае вы можете расширять MouseAdapter и обрабатывать только интересующие вас события.

Обратите внимание, что класс Adapter обычно также реализует интерфейс.

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

В опубликованном вами примере это бесполезно, однако если вы создадите адаптер для реализации IListener (class Adapter implements IListener), он станет немного более полезным, чем вы можете создать экземпляр объекта Adapter, например new Adapter();

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

...