2012-12-16 20 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