2014-09-08 1 views
0

이것은 하위 클래스 메소드가 상위 클래스 메소드의 하위 클래스 인 예외를 throw해야 함을 의미하는 링크 I am learning the Exception handling in java (basically in inheritance) 에서 계속 이어집니다.상속에서의 예외 처리

"서브 클래스는 슈퍼 클래스의 메소드를 오버라이드 (override)하면 다음에 상위 클래스 메소드의 절 (또는 재정의 된 메서드를 throw 유일한 예외 클래스의 전부 또는 일부를 지정할 수 있습니다 방법 정의를 서브 클래스"

이것은 규칙입니다. 그러나이 규칙이 작동하는 polymorphism를 들어

+3

이전 질문에서 Steve McLeod가 이미 답변했습니다 : http://stackoverflow.com/a/3520613/685806 – Pino

+0

이 질문에 대한 답변은 없지만 위의 대답은 규칙을 설명하지만 OP가되는 규칙의 이유는 아닙니다. 묻고있다. –

답변

1

을 만든 이유는 그 반대가 허용되지 않는 이유는이 규칙을. 만들기 뒤에 이유는 method signatures이 샘을 유지해야하는 무슨 내가 알아낼 수 아니다 e 예상되는 곳에서 동일한 인터페이스를 준수해야합니다.

예를 들어 당신이 UnknownIgnitionException를 throw하는 방법 drive()이있는 Car이 있고 그 클래스, 당신은 때때로 차처럼 취급 할 것 extends하는 Ford이있는 경우 (그리고 특히 Ford 유형 Car) 그래서 방법 drive()가 모든 자동차에서 똑같이 보이고 작동 할 것으로 기대합니다. 이것은 당신이 그들 모두가 당신이 할 수없는 독립 예외를 던진 경우

for (Car c : listOfCars) //list contains Fords, Porches, Fiats, etc 
{ 
    try { 
     c.drive(); //All sub-classed Cars contain this exact method 
    } 
    catch (UnknownIgnitionException e) 
    { 
    //As all subclassed cars are restricted to the same method signature, you can be sure what exceptions all Cars throw 
    } 
} 

을 가질 수 자동차 (포드, 피아트, 포르쉐)의 무리를 운전 테스트하기를 원한다면 의미

.