Класс может быть абстрактным, даже если не имеет никаких абстрактных методов? Если да Что проку?

У меня есть сомнение относительно класса HttpServlet, абстрактный класс даже при том, что нет никакого абстрактного метода в классе, все методы конкретны. Класс может быть абстрактным, даже если не имеет никаких абстрактных методов? Если да Что проку?

Спасибо

6
задан giri 31 January 2010 в 12:01
поделиться

4 ответа

В случае httpservlet , точка заключается в том, что программисты сервлетов обычно не хотят, чтобы их сервлеть поддерживать все 4 из основных методов http (post, get, put , Удалить), так что это было бы раздражать сделать doget () , допост () и т. Д. Методы абстрактны, поскольку программисты будут вынуждены внедрять методы, которые они не нужно. Следовательно, HTTPSERVLES обеспечивает реализацию по умолчанию для всех этих методов, которые ничего не за исключением возврата к клиенту «Состояние ошибки». Программисты могут переопределить методы, которые им нужны и не беспокоятся о остальных. Но на самом деле используя HTTPServlet сам класс не имеет смысла (так как он ничего не полезно), так что это Аннотация .

И там у вас есть отличный пример, когда он может иметь смысл иметь абстрактный класс без какого-либо абстрактного метода.

18
ответ дан 8 December 2019 в 03:26
поделиться

Нельзя создавать экземпляры абстрактных классов, поэтому вы должны подкласс их, чтобы использовать его.
В подклассе вы все еще можете реализовать свои собственные методы или переопределить родительские методы.

Может быть, не имеет смысла использовать httpservlet как автономный, но он обеспечивает необходимую функциональность по умолчанию в определенном контексте. Вы можете подкласс httpservlet для обслуживания этого контекста и иметь доступ к его функциональности.

Подкласс HTTPServlet не должен реализовывать методы, чтобы сделать свою собственную функциональную работу.

6
ответ дан 8 December 2019 в 03:26
поделиться

Это вопрос намерения. Если класс абстракция, вы не можете создать экземпляр этого класса - только подкласса.

Я не силен на Java, но я предполагаю, что HTTPServlet предоставляет реализации по умолчанию методов, но вы ожидаете, что вы должны переопределить некоторые из них. Он по-прежнему имеет мало смысла иметь неспециальный экземпляр этого класса, поэтому он абстрактно, поэтому компилятор бросает намек на кого-либо, кто пытается.

3
ответ дан 8 December 2019 в 03:26
поделиться

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

2
ответ дан 8 December 2019 в 03:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: