부모 클래스가 확인 예외를 throw하도록 선언하면 하위 클래스는 부모 클래스의 계약을 이행하기 위해 최소한 동일한 확인 예외를 throw해야합니다. 반대로, 자식 클래스 메서드는 예외를 throw하도록 선언 할 필요는 없지만 부모 클래스 메서드가 throw하도록 선언되지 않은 확인 된 예외를 throw하도록 선언 할 수는 없습니다.
package test;
import java.io.IOException;
public class Parent {
void foo() throws IOException {
throw new IOException();
}
}
이 컴파일 것 :이를 설명하기 위해
, 당신은 다음과 같은 클래스가 상상할 수
package test;
class Child1 extends Parent {
void foo() {
}
}
을하지만이없는 것 :
package test;
import org.xml.sax.SAXException;
class Child2 extends Parent
{
void foo() throws SAXException {
throw new SAXException();
}
}
javac
컴파일러 것 다음 출력을 생성하십시오.
즉
test/Child2.java:6: foo() in test.Child2 cannot override foo() in test.Parent; overridden method does not throw org.xml.sax.SAXException
void foo() throws SAXException {
^
1 error
, 당신이 쓸 수 없습니다 :
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException, SAXException {
super.doGet(req, resp);
...
}
당신은 doGet()
방법에 SAXException
을 처리해야하고 당신이 그것을 다시 발생 할 경우 ServletException
에 포장 할 수 있습니다.
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doGet(req, resp);
try {
// code that possibly throws a SAXException
...
} catch (SAXException e) {
// handle it or rethrow it as ServletException
...
}
}
이것은 내가 무엇을 말하고 있는지 (훨씬) 더 나은 설명입니다. –