在写 class A extends HttpServlet {
}的时候,我想起来抽象类的继承必须在子类里实现抽象类所提供的抽象方法,我看了一下HttpServlet类里面提供了很多的方法,为什么只重写doget()或者dopost()方法就可以了?
这点我不太理解,请大家指正!

解决方案 »

  1.   

    Http虽然是抽象类,但是杂这个类中没有抽象的方法,其中所有的方法都是已经实现的。只是在这个类中对客户请求进行处理的方法,没有真正地实现,当然也不可能真正实现。因为对客户请求如何进行处理,需要的应用来决定。我们在编写HttpServlet的时候,根据应用的需要,重写其中的对客户请求进行处理的方法即可
      

  2.   

    要是还不清楚,楼主知道HttpServlet继承自GenericServlet类,它在javax.servlet包中,而GenericServlet是抽象类,继承自Servlet接口,它实现了Servlet接口中除service()方法之外的其他4种方法的简单实现 。所以,楼主看一下源码一切就清楚了!问题应该已经解决了,
      

  3.   

    因为在HttpServlet中的都是实例方法
      

  4.   

    楼上都讲清楚了。因为HttpServlet中没有抽象方法,所以不用重写,但子类仍可调用父类中不是private的方法
      

  5.   

    HttpServlet模版方法模式
    提供了init(),service()等几个方法调用顺序的实现
    但是这个几个方法在HttpServlet中并不一定有具体的实现,可以是空实现
    可以根据子类的重写来进行不同的实现
    比如下面这个例子:
    abstract class A{
       public A(){
       }
       public void a(){
             b();
             c();
       }
       protected void b(){
             System.out.println("父类b()");  
       }
       protected void c(){
             System.out.println("父类c()");
       }
    }
    class B extends A{
       protected void b(){
             System.out.println("子类B.b()");  
       }
    }
    class C extends A{
       protected void b(){
             System.out.println("子类C.b()");  
       }
    }
    class Test{
         public static void main(String[] args){
              A b = new B();
              A c = new C();
              b.a();
              c.a();
         }
    }
      

  6.   

    Http虽然是抽象类,但是杂这个类中没有抽象的方法,其中所有的方法都是已经实现的。 只是在这个类中对客户请求进行处理的方法,没有真正地实现,当然也不可能真正实现。 因为对客户请求如何进行处理,需要的应用来决定。 我们在编写HttpServlet的时候,根据应用的需要,重写其中的对客户请求进行处理的方法即可