2017-03-05 4 views
-4

수퍼 클래스 개체가 하위 클래스 개체를 가리킬 수 있지만 하위 클래스의 내용을 알 수는 없다는 것을 읽었습니다. 그러면 수퍼 클래스가 서브 클래스 유형의 예외를 catch 할 수 있습니까?Exception 클래스는 ArithmeticException 클래스에 대해 어떻게 알고 있습니까?

여기서는 혼란 스럽습니다. 도와주세요

class abc { 
    public static void main(String k[]) { 
     try { 
      int a = 0; 
      int b = 56/0; 
     } catch (Exception e) { 
      System.out.println(" divide by zero "); 
     } 

    } 
} 

답변

0

ArithmeticExceptionException의 하위 유형입니다. 그래서, 당신의 catch에, 당신이 말하고있는 것은 Exception 또는 Exception의 하위 유형 모든 것을 잡아 "입니다.이 경우, 그 ArithmeticException이 포함되어 있습니다.

0

이는 두 개의 독립적 인 것들입니다. 1의 경우는 제네릭 형식이 두 번째는 반대이며, 예외가 특정 유형과 일치하고 발견되지 않으면 클래스 계층 구조로 올라가 다음 일반 유형을 찾은 다음 일치 할 때까지 다음 일반 유형을 찾습니다.

이 특정 시나리오에서

은 AE가 E의 하위 클래스이므로 AE가없는 경우 Exception

인 계층 구조의 다음 일반 형식과 일치합니다
0

수퍼 클래스는 서브 클래스에 대해 알지 못합니다. 즉, 하위 클래스는 직접 슈퍼 클래스라는 것을 알고 있습니다.

귀하의 catch 문은 instanceof 운영자와의 if 문 같은 종류의 경우 : instanceof 운영자가 논리적으로 왼쪽에있는 객체의 클래스를 받고 확인하여 이루어집니다

if (thrownException instanceof Exception) { 
    Exception e = (Exception) thrownException; 
    System.out.pritnln("divide by zero"); 
} 

경우, 또는 그것의 superclasses, 연산자의 오른쪽에있는 클래스입니다. 당신이 볼 수있는

그래서, 그것에 대해 ArithmeticException을 알고 Exception가 아니라, 그 catch 문이 작동하려면에 대한 Exception을 알고 ArithmeticException입니다.