1
간단한 캐스팅 예제를 사용하는 데 어려움이 있습니다. 저 좀 도와 주 시겠어요?딜레이마 캐스팅 인터페이스
public class Example1 {
interface ParentIf{}
interface ChildIf extends ParentIf {}
interface OtherIf {}
class ParentCl {}
class ChildCl extends ParentCl {}
class OtherCl {}
public static void main(String[] args) {
ChildIf cI = null;
ParentIf pI = null;
OtherIf oI = null;
ChildCl cC = null;
ParentCl pC = null;
OtherCl oC = null;
cI = (ChildIf)oI; //case1 - fine
cC = (ChildCl)oC; //case2 - inconvertible types
cI = (ChildIf)oC; //case3 - fine
}
}
하지만 더 어색한 점은 왜 다른 두 문장이 괜찮은지 모르겠다는 것입니다.
OtherIf와 ChildIf 사이의 연결이 표시되지 않습니다. 그렇다면 CaseI의 두 인터페이스 사이에 "확장"이 없을 때 ChildIf에 OtherIf를 캐스팅하는 것이 어떻게 가능합니까? oI
이 ChildIf 및 OtherIf 모두를 구현하는 클래스의 인스턴스가 될 수 있기 때문에
나는 아직도 조금 혼란 스럽다. "할 수있다"는 의미는이 순간에 나는 ChildIf와 OtherIf를 모두 구현하는 클래스의 인스턴스가 아니라 IntelliJ가 될 수 있음을 "안다"는 것을 의미합니다. 미안 내가 그것을 볼 수 없습니다 :/ – vviston
oI는 'OtherIf' 유형의 객체를 참조하는 변수입니다. 컴파일러는 런타임에 객체의 구체적인 유형을 신경 쓰지 않습니다. 그것은 선언 된 변수의 타입 인 OtherIf에 관심을가집니다. 유형이 ChildIf 및 OtherIf를 모두 구현할 수 있습니까? 예, 가능합니다. 따라서 캐스트가 성공할 수도 있으므로 의미가 있습니다. –