2013-06-30 4 views

답변

0

일반적으로 불가능합니다. 정적 유형을 사용하는 Java와 같은 언어를 사용하면 컴파일 오류가 발생합니다. objectClassB으로 다시 캐스팅합니다.

((ClassB) object).variable_from_classB 

귀하의 경우에 적용됩니다. 정적 유형 정보없이 언어를 사용하는 경우 컴파일러는 대개 변수가 액세스 될 수 있는지 또는 객체에 있는지 여부를 결정할 기회가 없습니다. 이것은 런타임에 결정됩니다.

캐스팅을 허용하는 정적 유형 언어에서 런타임 환경은 일반적으로 캐스트를 검사하고 오류가 발생하면 오류를 던집니다. 따라서 objectClassB 유형이 아닌 경우 컴파일러는 위의 행에서 오류를보고하지 않습니다. 그러나 객체의 구체 유형을 ClassB으로 캐스트 할 수 없으므로 런타임에 형 변환이 실패합니다.

위의 캐스팅만으로도 유효하지만 나쁜 습관입니다. 적어도 캐스팅의 성공 여부를 미리 확인해야합니다. instanceof 또는 귀하의 언어가 제공하는 연산자를 사용하십시오. ClassB의 필드/메소드에 액세스해야하는 경우 InterfaceA 대신 ClassB 유형의 변수/매개 변수를 사용하는 것이 더 좋습니다.

참고 :

+0

안녕하세요 답변에 감사드립니다 @nif. 클래스 B의 필드/메소드에 액세스해야한다면 "InterfaceA 대신 ClassB 유형의 변수/매개 변수 사용"이라고 말하면 ClassB와 같은 다른 인스턴스를 생성해야합니다. varObj = new ClassB(); varObj 통해 내 변수에 액세스 할? – Zippy

+0

제 말은,'ClassB'에서 필요한 것들이 필요하다면 먼저 변수를'InterfaceA'라고 선언하지 마십시오. 'ClassB'가'InterfaceA'를 구현했다고해서 반드시 사용해야한다는 것은 아닙니다. – nif

+0

아 ~, 고마워 .-) – Zippy

관련 문제