책에서는 예외 부분을 굉장히 간단하게 설명이 되어있는 것 같아, 더 구체적인 자료를 찾아봄
"예외는 조상 클래스이 메서드보다 많이 선언할 수 없다." 라고 적혀있지만, 엄밀히 말하면 checked Exception 에만 해당하는 내용이다. unchecked Exception 에 대해서는 자식 클래스에서 추가로 선언해도 상관없다.
(case 1) 부모 메서드가 checked exception 던질 때,
class Parent{
void method1() throws SQLException { //checked exception
}
}
class Child extends Parent{
void method1() {
}
}
(case 2) 부모 메서드가 unchecked exception 던질 때,
class Parent{
void method1() throws RuntimeException { // unchecked exception
}
}
class Child extends Parent{
void method1() {
}
}
(case 3) 자식이 부모가 던지지 않는 checked exception 을 던질 때 => compile error
class Parent{
void method1() {
}
}
class Child extends Parent{
void method1() throws SQLException { // checked exception, compile error
}
}
(case 4) 자식이 부모가 던지지 않는 unchecked exception 을 던질 때, ok
class Parent{
void method1() {
}
}
class Child extends Parent{
void method1() throws RuntimeException { // unchecked exception, ok
}
}
(case 5) 아래는 컴파일 성공하는 경우, 두 예외의 자리를 서로 바꾸면 컴파일 오류
class Parent{
void method1() throws SQLException {
}
}
class Child extends Parent{
void method1() throws RuntimeException {
}
}
(case 6) 부모가 선언하지 않은 checked exception 던지면 컴파일 오류
class Parent{
void method1() throws IOException {
}
}
class Child extends Parent{
void method1() throws SQLException { // this exception is not a checked exception thrown by Parent!
}
}
(case 7) 가능한 경우
class Parent{
void method1() throws SQLException {
}
}
class Child extends Parent{
void method1() throws SQLDataException { // SQLDataException is a child of SQLException!
}
}
'Java > Java의 정석' 카테고리의 다른 글
[Java의 정석] 09. java.lang 패키지 (0) | 2022.03.17 |
---|---|
[Java의 정석] 08. 예외 처리 (0) | 2022.03.17 |
[Java의 정석] 07. 클래스 상속 & 인터페이스 상속 (0) | 2022.03.14 |
[Java의 정석] 06. 객체지향 프로그래밍 (0) | 2022.03.08 |
[Java의 정석] 05. 배열 (0) | 2022.03.05 |