前提:
1,HttpServlet中service方法调用doGet() 
2,一般我们自己的Servlet都会重写doGet()
3,在HttpServlet源码里是通过service方法来调用doGet()。问题:
父类不能调用子类重写的方法!那么HttpServlet是怎么做到调用子类重写的方法的?

解决方案 »

  1.   

    这根源码有啥关系啊?你完全不知道Java的 多态 特性么?
      

  2.   

    tomcat直接初始化你子类的servlet不就好了,
    比如
    HttpServlet servlet = new YourServlet();servlet.doGet() 因为你覆盖了doGet和doPost(),他父类调用doGet(),当然可以调用你覆盖的方法了。这就是覆盖的用处啊
      

  3.   

    楼主看看Java的多态部分。子类覆盖了父类的方法,通过父类调用该方法实际使用的是子类的方法。
      

  4.   

    你写的Servlet从它的父类HttpServlet继续了所有的方法
    包括service
    你配置到web.xml中的Servlet是你自己写的,不是父类HttpServlet,
    所以没有什么父类调用子类的说法,
    是你写的Servlet类的一个实例调用了它自己的service,再调用doGet/doPost方法
    这些实例化和方法调用都是由web容器完成的
      

  5.   

    另外还有
    不是类调用方法,而是类的实例对象调用方法
    除非是static的方法可以由类直接调用了解一下多态吧
      

  6.   

    Service{
    doGet();}abstract void doGet()