먼저 다운캐스트가 무엇인지 정확하게 정의하는 데 도움이 됩니다. 실제로 는 매우 간단합니다 – 기본 클래스와 해당 기본 클래스에서 직접 또는 간접적으로 파생되는 클래스가 있다고 가정합니다. 그런 다음 해당 기본 클래스 형식의 개체가 파생 된 클래스 유형으로 캐스팅 될 때마다 다운 캐스트라고합니다. 다운캐스트라고 하는 이유는 상속 다이어그램이 일반적으로 작성되기 때문에 기본 클래스가 맨 위에 있고 파생 클래스가 기본 클래스 아래에 있기 때문입니다. 따라서 다운캐스팅에서는 기본 클래스의 개체를 맨 위에 가져간 다음 파생 클래스 중 하나의 유형으로 변환하려고 시도하여 상속 다이어그램을 아래로 이동합니다(내려가기). 다운 캐스팅이 작성되는 코드에 따라 항상 의미가 있는 것은 아니기 때문에 시도중인 키워드입니다. 위의 코드에서 이 줄은 다운캐스트가 수행되는 위치입니다. 예를 들어, 개가 Animal을 확장하는 경우 개 또는 동물 클래스에서 개를 참조할 수 있습니다. 하위 클래스 형식이 부모 클래스의 개체를 참조하는 경우 다운캐스팅이라고 합니다. 직접 수행하는 경우 컴파일러는 컴파일레이션 오류를 제공합니다. 형식 캐스팅을 수행 하면 ClassCastException 런타임에 throw 됩니다. 그러나 인스턴스오퍼레이터를 사용하면 다운캐스팅이 가능합니다. OCaml과 같은 일부 언어는 다운캐스팅을 완전히 허용하지 않습니다.

[1] 위의 예에서는 Cat의 인스턴스인 객체만 다운캐스트하려고 합니다. 이렇게 하려면 연산자 인스턴스를 사용합니다. 다음 예제에 표시된 인스턴스 of 연산자 없이 다운캐스팅을 수행할 수도 있습니다. 컴파일 타임 다운캐스팅은 static_cast에 의해 구현되지만 이 작업은 형식 검사를 수행하지 않습니다. 잘못 사용 하는 경우 정의 되지 않은 동작을 생성할 수 있습니다. 이 기본 자습서에서는 업캐스팅, 다운캐스팅, 사용 방법 및 이러한 개념이 다형성을 활용하는 데 어떻게 도움이 되는지 에 대해 자세히 설명했습니다. 이 방법에서 다운캐스팅은 컴파일러가 가능한 오류를 감지하지 못하게 하고 대신 런타임 오류를 발생시킵니다. myObject를 문자열로 다운 캐스팅 (`(String)myObject`)는 myObject가 문자열 형식인 경우가 있기 때문에 컴파일 타임에 불가능했기 때문에 런타임에전달된 매개 변수가 논리적인지 여부를 알아낼 수 있습니다. myObject를 유니버설 java.lang.Object.toString(사용 하 여 컴파일 타임 문자열로 변환할 수 있지만 도움이 되지 않거나 안전하지 않은 경우 toString()의 기본 구현을 호출하는 위험이 있으며 예외 처리는 이를 방지할 수 없습니다. 인스턴스of 연산자가 다운캐스팅이 가능한 경우 예제를 살펴보겠습니다.

Animal 형식의 변수를 사용하여 Cat 클래스에서만 사용할 수 있는 메서드를 호출하려면 어떻게 해야 합니까? 여기에 다운 캐스팅이 온다. 슈퍼 클래스에서 하위 클래스로 캐스팅하는 것입니다. 심하게 고려된 디자인의 일반적인 예는 Java 제네릭이 도입되기 전에 Java 컨테이너와 같은 상위 형식의 컨테이너이며, 다시 사용할 수 있도록 포함된 개체를 다운캐스팅해야 합니다.