2017-10-12 15 views
-6

어떻게 이것이 합법적 일 수 있습니까? A는 Intf에 의해 구현되지 않습니다. 그러므로 이것을 어떻게 합법적으로 사용할 수 있습니까?Java - interface -instsof

interface Intf { 
} 

class A{ 
} 

class B{} 

class Test {  
    public static void main(String[] args) { 
     A obj = new A(); 
     System.out.println(obj instanceof Intf); //Legal - no any errors, just output false 
     System.out.println(obj instanceof B); // Illegal - compile error 
    } 
} 
+0

무엇이 질문입니까? 이것을 법률로 사용하는 법? –

+1

인쇄 라인 명세서의 출력은 무엇입니까? 참된? 그릇된? "불법"? – deHaar

+0

실제로 instanceOf가 수행하는 작업은 특정 클래스 또는 인터페이스에 대한 개체를 확인하는 것입니다. 그래서 여기에 합법적 인 의미는 무엇입니까? –

답변

1

JLS 15.20.2 상태 다음의 ReferenceType에 RelationalExpression의 캐스트가 컴파일 타임 오류 (§15.16)로 거부 될 경우

는 다음 instanceof를 관계식 마찬가지로 컴파일 타임 오류가 발생합니다 . 이러한 상황에서 instanceof 표현의 결과는 결코 사실 일 수 없습니다. 이 경우 (Intf) obj에서

컴파일 시간 오류 아니기 때문에 JLS 15.16 상태 :

피연산자의 컴파일 - 시간 타입에 의해 지정된 타겟 타입 전환 (§5.5)를 변환하여 변환 될 수 없다면 캐스트 연산자를 사용하면 컴파일 타임 오류가 발생합니다.

왜 캐스트가 컴파일 오류가 아닙니다.

정적 유형 objA 인 동안 실제는 A 또는 A의 하위 클래스 일 수 있습니다. A의 하위 클래스는 일 수 있습니다. Intf !!

objA 인스턴스에 대한 참조와 함께 초기화 되었기 때문에이 컨텍스트에서는 불가능하다는 것을 알 수 있습니다. 그러나 형식 검사기는 논리적 추론을 할 수 없습니다. (아니면 최소한 오류가 아니라 경고로만 처리 할 수 ​​있습니다.)

+0

와우. Thatz 완벽한 대답. 고맙습니다 – kasun