2012-12-16 18 views
0

部署项目,当过客户端发送请求第一次的TestServlet然后服务器创建的TestServlet对象,然后调用后第一个init()方法(的init(ServletConfig类配置))。然后JVM检查TestServlet中的第一个init()方法,因为它不可用,那么它检查超类HttpServlet那里还有第一个init方法不可用,那么JVM检查HttpServlet的超类,即GenericServlet类中第一个init()是可用的那么JVM执行它并调用第二个init()作为第二个init()直接在TestServlet中提供,然后JVM执行它。关于第一个init()和第2的init()

Q.关于para我想知道GenericServlet的第一个init()如何调用TestServlet类的第二个init(),因为在GenericServlet中第一个init()内部调用了init(),它是空的。

回答

1

这就是多态的基本原理。由于init()是可重写的方法,并且由于该servlet是的TestServlet,其覆盖init()方法的一个实例,使用TestServlet实施该方法。

就像下面的例子:

public class Animal { 
    public void saySomething() { 
     // do nothing 
    } 

    public void saySomethingElse() { 
     saySomething(); 
    } 
} 

public class Dog extends Animal { 
    @Override 
    public void saySomething() { 
     System.out.println("bark!"); 
    } 
} 

public class Main { 
    public static void main(String[] args) { 
     Animal animal = new Dog(); 
     animal.saySomething(); // bark!, because the animal is a dog 

     animal.saySomethingElse(); // still bark!, because the animal is a dog 
            // and saySomethingElse() calls the animal's 
            // polymorphic saySomething() method. 
    } 
} 
+0

非常感谢你:-)非常漂亮解释。 – Surya