다운 캐스팅은 때때로 필요하고 적절합니다. 특히, 능력이 있거나없는 물건이있는 경우에 적합하며, 능력이없는 물건을 기본 방식으로 처리하는 동안 존재하는 경우에는 그 능력을 사용하려고합니다. 간단한 예로서, a String
가 다른 임의의 객체와 같은지 물었다 고 가정하자 . 하나 String
가 다른 것과 같기 String
위해서는 다른 문자열의 길이와 배경 문자 배열을 검사해야합니다. 그러나 a String
가 a 와 같은지 물으면 A Dog
의 길이에 액세스 할 수 없지만 Dog
반드시 그럴 필요는 없습니다. 대신, a String
자체를 비교해야하는 객체가String
비교는 기본 동작을 사용해야합니다 (다른 객체가 같지 않다고보고).
다운 캐스팅이 가장 모호한 것으로 간주되는 시간은 캐스팅중인 오브젝트가 올바른 유형 인 것으로 "알려질"때입니다. 일반적으로 객체가로 알려진 경우 Cat
유형 변수 Cat
대신 유형 변수를 사용 Animal
하여 참조해야합니다. 그러나 이것이 항상 작동하지 않는 경우가 있습니다. 예를 들어, Zoo
컬렉션은 짝수 / 홀수 배열 슬롯에 객체 쌍을 보유 할 수 있으며, 각 쌍의 객체는 다른 쌍으로 객체에 작용할 수없는 경우에도 서로 작용할 수있을 것으로 기대합니다. 이러한 경우 각 쌍의 객체는 구문 상 다른 쌍으로부터 객체를 전달할 수 있도록 비 특정 매개 변수 유형을 계속 수용해야합니다 . 따라서, 경우에도 Cat
의playWith(Animal other)
방법은 경우에만 작동합니다 other
을했다 Cat
, (가) Zoo
그에게의 요소를 통과 할 수 있어야합니다 Animal[]
그것의 매개 변수 유형이 될 것이다, 그래서 Animal
보다는 Cat
.
다운 캐스팅이 합법적으로 피할 수없는 경우에는, 파업없이 사용해야합니다. 중요한 질문은 다운 캐스팅을 현명하게 피할 수있는시기를 결정하고, 가능한 경우에는이를 피하는 것입니다.