Подтвердить что ты не робот

Должен ли абстрактный класс иметь хотя бы один абстрактный метод?

Нужно ли для абстрактного класса иметь хотя бы один абстрактный метод?

4b9b3361

Ответ 1

Тема этого сообщения и тела задают два разных вопроса:

  • Должен ли он иметь хотя бы один абстрактный элемент?
  • Нужно ли иметь хотя бы один абстрактный член?

Ответ на # 2 окончательно нет.

Ответ на # 1 является субъективным и вопросом стиля. Лично я бы сказал "да". Если вы намерены не создавать экземпляр класса (без абстрактных методов), лучшим способом справиться с ним является конструктор private protected, а не помечая его abstract.

Ответ 2

Нет, это не обязательно. Вы часто это видите в шаблоне шаблона, например HttpServlet, в котором каждый метод уже имеет поведение по умолчанию, и вы можете переопределить только один (или более) из них, а не все из них.

Ответ 3

В JDK 1.0 действительно необходимо было иметь хотя бы один абстрактный метод в абстрактном классе. Это ограничение было удалено в JDK 1.1 (1997? (Я старый)), и такие классы добавлены в библиотеку Java, например java.awt.event.KeyAdapter.

В С++ вам нужна хотя бы одна чистая виртуальная функция, чтобы сделать подкласс необходимым, и по крайней мере одну виртуальную функцию для добавления RTTI в класс. Как правило, имеет смысл использовать деструктор.

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

Ответ 4

Нет - вы можете объявить аннотацию класса без абстрактных методов. Это может не иметь никакого смысла концептуально для того, чтобы экземпляр этого класса существовал, или вы можете убедиться, что только подклассы этого класса могут быть созданы (по какой-либо причине)

Ответ 5

Если класс имеет модификатор abstract в объявлении, он становится классом abstract.