부모 클래스의 메소드를 자식 클래스에서 overriding 할 때에 있어서, throws 가 적용된 메소드의 경우를 살펴보겠습니다. 먼저, checked Exception 의 경우에 대해서 살펴보겠습니다.


부모 클래스에서 throws 구문이 없다면, 자식 클래스에서는 Exception 을 throws 할 수 없습니다.


class Super{

public void method(){


}

}


class Sub extends Super{

public void method() throws Exception{ // 잘못된 방식


}

}


부모 클래스에서 throws 구문이 있다면, 자식 클래스에서는 throws 구문을 없앨 수 있습니다.


class Super{

public void method() throws Exception{


}

}


class Sub extends Super{

public void method(){ // 올바른 방식


}

}


부모 클래스에서 throws 구문이 있다면, 자식 클래스에서는 더 상위의 Exception 을 쓸 수 없습니다.


class Super{

public void method() throws ReflectionException{


}

}


class Sub extends Super{

public void method() throws Exception{ // 잘못된 방식


}

}


부모 클래스에서 throws 구문이 있다면, 자식 클래스에서는 더 하위의 Exception 을 쓸 수 있습니다.


class Super{

public void method() throws Exception{


}

}


class Sub extends Super{

public void method() throws ReflectionException{ // 올바른 방식


}

}


그렇다면, unchecked Exception (or Error) 에 대해서도 살펴보겠습니다.


부모 클래스에서 throws 구문이 없다면, 자식 클래스에서는 Exception 을 throws 할 수 있습니다.


class Super{

public void method(){


}

}


class Sub extends Super{

public void method() throws RuntimeException{ // 올바른 방식


}

}


부모 클래스에서 throws 구문이 있다면, 자식 클래스에서는 throws 구문을 없앨 수 있습니다.


class Super{

public void method() throws RuntimeException{


}

}


class Sub extends Super{

public void method(){ // 올바른 방식


}

}


부모 클래스에서 throws 구문이 있다면, 자식 클래스에서는 더 상위의 Exception 을 쓸 수 있습니다.


class Super{

public void method() throws ArithmeticException{


}

}


class Sub extends Super{

public void method() throws RuntimeException{ // 올바른 방식


}

}


부모 클래스에서 throws 구문이 있다면, 자식 클래스에서는 더 하위의 Exception 을 쓸 수 있습니다.


class Super{

public void method() throws RuntimeException{


}

}


class Sub extends Super{

public void method() throws ArithmeticException{ // 올바른 방식


}

}


부모 클래스에서 throws 구문이 있다면, 자식 클래스에서는 다른 종류의 Exception 을 쓸 수 있습니다.


class Super{

public void method() throws ArithmeticException{


}

}


class Sub extends Super{

public void method() throws ArrayIndexOutOfBoundsException{ // 올바른 방식


}

}


by kkikkodev 2015. 9. 10. 00:28