Считается ли лучшей формой для абстрактного класса включать абстрактные методы из интерфейса?
Я понимаю, что объявление абстрактных методов, оставшихся от интерфейса, необязательно, но мне интересно, считается ли это семантически лучшей формой для их включения.
Интерфейс:
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()
необходимо перезаписывать только в подклассах, которые используют другое значение, чем значение по умолчанию.