본문 바로가기

Develop/Java

Java Overriding 주의점

728x90

오버라이딩 시 자식 클래스는 부모 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

 

class Parent {
	void parent() throws IOException, SQLException {        
    	// Code stuff...    
    }
} 

class Child extends Parent {
	@Override
	void parent() throws IOException {
    	// Code stuff...  
    }
}

Child 클래스의 parent 메서드에 선언된 예외의 개수가 부모인 Parent 클래스의

parent 메서드에 선언된 예외의 개수보다 적으므로 올바르게 오버라이딩 되었다.

 

class Parent {    
	void parent() throws IOException, SQLException {
    	// Code stuff...    
    }
} 

/* Error occured while overriding */
class Child extends Parent {  
	@Override
	void parent() throws Exception {        
    	// Code stuff...    
    }
}

만일 위와 같이 오버라이딩을 하였다면 부모 클래스에 정의된 메서드보다 적은 개수의 예외를 선언한 것처럼 보이지만

Exception은 모든 예외 클래스의 최상단 부모이므로 가장 많은 개수의 예외를 던질 수 있도록 선언한 것이다.

따라서 예외의 개수는 적거나 같아야 한다는 조건을 만족시키지 못하는 잘못된 오버라이딩인 것이다.

 

자식 클래스의 메서드는 부모 클래스의 메서드의 접근 제어자보다 작은 범위의 접근 제어자를 가질 수 없고 인스턴스 메소드를 클래스 메소드로 바꿀 수 없는 등 여러 가지 오버라이딩 주의점은 알고 있었지만 이러한 Exception 핸들링 범위에 대한 내용은 모르고 있었다.