Probably, to prevent direct instantiation of HttpServlet by creating its instance.
In other words, to make sure that whenever HttpServlet is used, it is always extended by the subclass.
No... It can be overridden. Here is the example from Herbert Shcildt Java 2: The Complete reference
import java.io.*;
import javax.servlet.*;
public class HelloServlet extends GenericServlet
{
public void service(ServletRequest request,ServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("<B>Hello!");
pw.close();
}
}