동현 유
척척석사
동현 유
전체 방문자
오늘
어제
  • 분류 전체보기 (181)
    • BlockChain (48)
      • [paper] Consensus (13)
      • [paper] Execution (19)
      • [paper] Storage (5)
      • [paper] ZKP (1)
      • [paper] Oracle (1)
      • Blockchains (9)
    • Java (19)
      • Java의 정석 (13)
      • Java 파헤치기 (5)
    • Python (20)
      • Python 뜯어보기 (6)
      • 데이터 분석 기초 (5)
      • Python 기초 강의 (6)
      • Python 기초 강의 부록 (3)
    • Golang (0)
    • MySQL (3)
      • programmers (2)
      • 기본 문법 (0)
    • 웹 프로젝트 (IBAS) (36)
      • Django 레거시 (14)
      • SpringBoot api 개편 (14)
      • Infra (3)
      • 서버 장애 기록 (4)
      • 신입팀원 교육 자료 (1)
    • CS (30)
      • Operating System (22)
      • Computer Security (3)
      • Network (4)
      • DBMS (1)
    • 책 (10)
      • 도메인 주도 설계 철저 입문 (9)
      • Real MySQL 8.0 (1)
    • BOJ 문제 풀이 (3)
    • 이러쿵저러쿵 (10)
    • 회고 (1)

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
동현 유

척척석사

Java/Java의 정석

[Java의 정석] 7.2 메소드 오버라이딩 시 예외 선언

2022. 3. 14. 11:08

책에서는 예외 부분을 굉장히 간단하게 설명이 되어있는 것 같아, 더 구체적인 자료를 찾아봄

"예외는 조상 클래스이 메서드보다 많이 선언할 수 없다." 라고 적혀있지만, 엄밀히 말하면 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
    동현 유
    동현 유
    Fault Tolerant System Researcher for more Trustful World and Better Lives. (LinkedIn: https://www.linkedin.com/in/donghyeon-ryu-526b8a276/)

    티스토리툴바