HttpServlet
- это абстрактный класс со всеми реализованными методами. Почему это абстрактно?Почему HTTPServlet - абстрактный класс? Любая функциональная причина?
Самый общий ответ, который я получил, - это ограничение экземпляра HttpServlet
. Но есть и другие способы сделать это, например, частный конструктор будет ограничивать экземпляр.
Я могу понять, что они следуют шаблону шаблона метода шаблонов. Если некоторые методы являются абстрактными, пользователь в конечном итоге будет реализовывать их все, даже если он не нуждается в них для своей бизнес-логики.
Но если HttpServlet
не был абстрактным, пользователь все равно может его расширить и переопределить требуемые методы.
По крайней мере, по смыслу словаря слова «абстрактное», для меня нет никакого смысла иметь абстрактный класс со всем реализованным методом.
Да, сочетание абстрактных и конкретных методов в порядке.
Но если вы делаете абстракцию классов, почему бы не сделать те методы абстрактными, которые подкласс должен переопределить? или может вообще не объявлять его абстрактным?
Нравится doGet()
или doPost()
В этом случае.
Вы все же можете создать анонимный класс, например новый HTTPServlet() {}; ничто не определено. Я думаю, что вся идея заключается в том, чтобы использовать его как родительский сервлет со всем необходимым набором, он не абстрактный из-за наличия абстрактных методов, а из-за смысла. Нет такой вещи, как «сервлет», но «MyServlet» – porfiriopartida
Так что в основном абстрактно указать пользователю, что вы должны обеспечить реализацию своего сервлета. Но это было необходимо? Я имею в виду, почему они не делают его нормальным классом с определением в javadocs, говорящим, что вам нужно предоставить реализацию для вашего сервлета. Я хочу сказать, что это излишне усложняет использование абстрактного ключевого слова для новичков. – rockyPeoplesChamp
Вы можете предоставить doGet без doPost, это означает, что сервлет не поддерживает doPost. Вы можете увидеть код здесь: http://grepcode.com/file/repo1.maven.org/maven2/javax.servlet/servlet-api/2.5/javax/servlet/http/HttpServlet.java И все же у вас может быть сервлет без какой-либо реализации, а затем он будет бросать не поддерживаемые ошибки, не исключение, а функциональные ошибки. – porfiriopartida