2010-01-31 2 views
6

HttpServlet 클래스에 대한 의문점은 클래스에 추상 메서드가 없더라도 추상 클래스라는 것입니다. 모든 메서드가 구체적입니다. 추상 메서드가없는 경우에도 클래스가 추상 클래스가 될 수 있습니까? 그렇다면 사용법은 무엇입니까? 당신이 그것을 사용하기 위해 그것들을 하위 클래스 그래서추상 메서드가없는 경우에도 클래스를 추상 클래스로 만들 수 있습니까? 그렇다면 사용법은 무엇입니까?

감사

+0

또한보십시오 http://stackoverflow.com/questions/362446/abstract-class-with-all-concrete-methods –

답변

18

HttpServlet의 경우 서블릿 프로그래머는 일반적으로 servlet 프로그래머가 기본 HTTP 메소드 (POST, GET, PUT, DELETE) 중 4 개를 모두 지원하지 않기를 원하므로 요점은 doGet(), doPost() 등의 메소드는 추상적인데, 프로그래머는 필요없는 메소드를 구현해야하기 때문이다. 따라서 HttpServlet은 오류 상태 코드를 클라이언트에 반환하는 것을 제외하고는 아무 것도 수행하지 않는 모든 메서드에 대해 기본 구현을 제공합니다. 프로그래머는 필요한 방법을 무시하고 나머지는 걱정하지 않아도됩니다. 그러나 실제로는 HttpServlet 클래스 자체를 사용하면 아무런 의미가 없으므로 (유용하지 않으므로) abstract입니다.

그리고 거기에는 추상적 인 방법이없는 추상 클래스가있는 것이 좋은 때를위한 훌륭한 예가 있습니다.

+0

정말 좋은 예입니다. 그런데 Template Method 패턴이라고도 부릅니다. – BalusC

6

하나는 추상 클래스를 인스턴스화 할 수 없습니다.
하위 클래스에서는 여전히 고유 한 메서드를 구현하거나 부모 메서드를 재정의 할 수 있습니다.

HttpServlet을 독립 실행 형으로 사용하는 것이 좋지 않을 수도 있지만 특정 환경에서 필요한 기본 기능을 제공 할 수 있습니다. 이 컨텍스트를 제공하고 해당 기능에 액세스하려면 HttpServlet의 하위 클래스로 지정할 수 있습니다.

서브 클래스 HttpServlet은 자체 기능을 작동시키기 위해 메소드를 구현할 필요가 없습니다.

3

의도적 인 문제입니다. 클래스가 추상 클래스 인 경우 해당 클래스의 인스턴스 (하위 클래스 만)를 만들 수 없습니다.

저는 Java에 강하지 않지만, HttpServlet은 메소드의 기본 구현을 제공하지만, 일부는 무시할 것으로 예상됩니다. 그 클래스의 불특정화 된 인스턴스를 갖는 것은 거의 의미가 없기 때문에 컴파일러는 추상이므로 시도하는 사람에게 힌트를 떨어 뜨립니다.

+0

+1,'HttpServlet' 방법의 디폴트 행동은 * very * boring web로 이끌 것입니다 pages ... –

+0

분명히 http://www.cavaliers.org/john/boring.html만큼 지루하지 않습니까? – Steve314

2

모든 메서드에 대한 구체적인 구현이있는 경우에도 클래스를 추상으로 표시하면 클래스 디자인이 완료되었는지 또는 나중에 일부 메서드를 추가 할 가능성이 있는지 확실하지 않은 경우에 유용합니다. 추상적으로 선언되지 않은 클래스를 나중에 추상적으로 변경하면 기존 바이너리와의 호환성이 깨지지 않습니다.

관련 문제