Считается ли лучшей формой для абстрактного класса включать абстрактные методы из интерфейса?

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

Интерфейс:

public interface Interface {
//Other methods....
public void unimplementedMethod();
}

Абстрактный класс:

public abstract Class AbstractClass implements Interface {
//Implemented methods....
public abstract void unimplementedMethod();   //Should include or better to leave out?
}

1 ответ

Решение

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

Анализаторы качества кода обычно требуют сокращения всего, что не нужно: избыточных модификаторов (например: public abstract в интерфейсах), объявленные исключения времени выполнения (throws IllegalArgumentException), избыточные броски (throws Exception, IOException) и так далее.

Однако вы можете рассмотреть реализацию поведения методов по умолчанию в абстрактном классе (методы прослушивателя событий с пустым телом, методы свойств конфигурации, которые возвращают значение по умолчанию,...). Например:

public boolean isPersistent() {
  return true;
}

isPersistent() необходимо перезаписывать только в подклассах, которые используют другое значение, чем значение по умолчанию.

Другие вопросы по тегам