# Why HttpServlet classs is declared as abstract class BUT with 100 % concrete functionality ?

* It is abstract because the implementations of key servicing methods have to be provided by _(i.e., overridden by)_ servlet developer. Since it's abstract, it's instance cannot be created.

### A subclass of HttpServlet must override at least one method, usually one of these:

* doGet, if the servlet supports HTTP GET requests.
* doPost, for HTTP POST requests.
* doPut, for HTTP PUT requests.
* doDelete, for HTTP DELETE requests.
* init and destroy, to manage resources that are held for the life of the servlet.

### What happens if you dont override the methods?

* If you extend the class without overriding any any of these methods as per your requirement, you will get a useless servlet; _(i.e. it will give an error response for all requests)_._(**HTTP 405** : Method not implemented)_. So, **if the class was not** abstract, then any direct instance of HttpServlet would be **useless**.

### But why is it abstract?

* So the reason for making the HttpServlet class abstract is to prevent a programming error.
* As a servlet developer, you can choose to override the functionality of your requirement (eg : doPost) & ignore other methods.
