2012-12-16 4 views
0

프로젝트를 배포 한 후 클라이언트가 처음 TestServlet에 요청을 보내면 서버는 testServlet 객체를 만든 다음 첫 번째 init() 메소드 (init (ServletConfig config)). 그런 다음 JVM은 TestServlet의 첫 번째 init() 메소드를 사용할 수 없으므로 검사합니다. 또한 수퍼 클래스 HttpServlet을 검사합니다. 첫 번째 init 메소드는 사용할 수 없습니다. HttpServlet의 수퍼 클래스 인 GenericServlet 클래스에서 첫 번째 init()이 availble인지 확인합니다. JVM은 그것을 실행하고 두 번째 init()을 호출합니다. 두 번째 init()은 TestServlet에서 직접 사용할 수 있으므로 JVM이이를 실행합니다.첫 번째 init() 및 두 번째 init()에 관한 내용

Q. GenericServlet 1st init()에서 내부적으로 init()가 비어 있기 때문에 GenericServlet의 첫 번째 init()이 TestServlet 클래스의 두 번째 init()을 호출하는 방법을 알고 싶습니다.

답변

1

그건 다형성의 기본 원리입니다. init()이 오버라이드 가능한 메소드이기 때문에 서블릿은 init() 메소드를 대체하는 TestServlet의 인스턴스이므로 메소드의 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

관련 문제