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

StackOverflow https://stackoverflow.com/questions/2283399

Вопрос

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

Это было полезно?

Решение

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

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

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

Ответ на № 1 субъективен и является стилем. Лично я бы сказал да. Если ваше намерение состоит в том, чтобы предотвратить создание класса (без абстрактных методов), лучший способ справиться с этим - это с помощью privateprotected конструктор, не отмечая его abstract.

Другие советы

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

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

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

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

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

Если у класса есть abstract модификатор на своем объявлении он становится abstract учебный класс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top