Если абстрактный класс имеет хотя бы один абстрактный метод?
необходимо ли абстрактному классу иметь хотя бы один абстрактный метод?
5 ответов
субъект этого поста и тело задают два разных вопроса:
- должен ли он иметь хотя бы один абстрактный член?
- необходимо ли иметь хотя бы один абстрактный член?
ответ на #2 окончательно нет.
ответ на #1 субъективен и зависит от стиля. Лично я бы сказал Да. Если вы намерены предотвратить создание экземпляра класса (без абстрактных методов), лучший способ справиться с этим с private
protected
конструктор, не пометив это abstract
.
нет, не надо. Вы часто видите это в "метод шаблона" шаблон дизайна, такие как HttpServlet
, в котором каждый метод уже имеет поведение по умолчанию, и вы можете переопределить только один (или несколько) из них вместо все из них.
в JDK 1.0 действительно необходимо было иметь хотя бы один абстрактный метод в абстрактном классе. Это ограничение было снято в JDK 1.1 (1997? (Я старый)) и такие классы, добавленные в библиотеку Java, такие как java.awt.event.KeyAdapter
.
В C++ вам нужна по крайней мере одна чистая виртуальная функция, чтобы сделать подкласс необходимым, и по крайней мере одна виртуальная функция для добавления RTTI в класс. Обычно имеет смысл использовать деструктор.
Примечание при переопределении неабстрактных методов, используя @Override
хорошая идея. Он не только сообщает читателю важную информацию о том, что пытается сделать код, но и обнаруживает общие ошибки, когда опечатки или неправильные типы параметров предотвращают переопределение.
нет - вы можете объявить абстрактный класс без каких-либо абстрактных методов. Это может не иметь никакого смысла концептуально для экземпляра этого класса, чтобы существовать, или вы можете убедиться, что только подклассы этого класса могут быть созданы (по любой причине)