2
아래 코드를 살펴보면 throws 예외와 함께 오버라이드에 대한 개념을 명확히하고 싶습니다. 제공된 코드가 아래에 작동합니까, 그렇다면 왜? 나는 IOException과 ArithmeticException 사이에 직접적인 부모 자식 관계가 없기 때문에이 질문을하고있다. ArithmeticException
는 RuntimeException
연장 있지만 때문에재정의하는 동안 상위 하위 계층 구조가 중요합니다.
public class TestExceptionChild {
public static void main(String[] args) {
Parent parent = new Child();
try {
parent.msg();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Parent{
void msg() throws IOException{
System.out.println("parent");
}
}
class Child extends Parent{
void msg() throws ArithmeticException{
System.out.println("child");
}
}
'IOException'은'RuntimeException'이 아닙니다. 오버라이드 (override) 된 메소드가'throws IOException'를 가질 필요가없는 이유는 무엇입니까? 어떻게 * 아무것도 * 던질 수 있지만 다른 종류의 검사 예외를 throw하지 않습니다? – Gendarme
@Gendarme "throws nothing"을'throws IOException'의 부분 집합으로 생각할 수 있습니다. 그러나 반대는 사실이 아닙니다. 부모가 아무것도 throw하지 않는 경우, 오버라이드 (override) 된 아이는 체크 예외를 슬로우 할 수 없습니다. – pathfinderelite
물론. 나는 깨달았어야했다. – Gendarme