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