자바 업캐스팅 다운캐스팅 예제

이제 서브타이핑과 정적 다형성을 모두 이해되었으므로 업캐스팅과 다운캐스팅에 대해 배울 수 있습니다. 업캐스팅은 Java의 또 다른 핵심 개념인 상속과 밀접한 관련이 있습니다. 참조 변수를 사용하여 보다 구체적인 형식을 참조하는 것이 일반적입니다. 그리고 우리가 이 것을 할 때마다 암시적 업캐스팅이 일어납니다. 다운 캐스팅 : 하위 클래스에 슈퍼 클래스를 캐스팅할 때 다운 캐스팅 (또는 축소)을 사용하고 다운 캐스팅은 Java에서 직접 가능하지 않습니다. Animal 형식의 변수를 사용하여 Cat 클래스에서만 사용할 수 있는 메서드를 호출하려면 어떻게 해야 합니까? 여기에 다운 캐스팅이 온다. 슈퍼 클래스에서 하위 클래스로 캐스팅하는 것입니다. 업캐스팅 및 다운캐스팅은 형식 관계를 기반으로 합니다. 즉, `Animal` 형식의 데이터가 있는 경우 하위 유형인 `Dog`로 `다운캐스트`할 수 있습니다. 반대로, `개`라는 형식의 데이터가 있다면, 슈퍼타입 `애니멀`으로 `업캐스트`할 수 있습니다. 그러나 `int`와 `Animal` 또는 `Dog` 간에 는 형식 관계가 없기 때문에 두 유형 의 데이터를 `int`로 캐스팅할 수 없습니다. 업캐스팅을 설명하기 위해 `cat2`의 유형을 다시 `Cat`으로 변경했습니다.

거기에서, 나는 `고양이2`를 `동물`로 업캐스트했다. 지금 코드를 컴파일하면 첫 번째 고양이 (”Kitty”)의 이름이 마우스 위에 표시되지만 두 번째 고양이 (”Kat”)는 동일한 동작을 갖지 않습니다. 이 문서에서는 기본 변환을 다루었으며 Java가 형식을 처리하는 방법을 잘 이해하기 위해 여기에 캐스팅하는 참조에 중점을 둡니다. 아래 예제를 볼 수 있습니다. 개체 (개, 애완 동물, 경찰 개) 유형에 따라 작동합니다. 여기서는 애니멀 타입에 개 유형을 시전합니다. 애니멀은 강아지의 초유형이기 때문에 이 캐스팅을 업캐스팅이라고 합니다. 위의 예제에서 cast() 및 isInstance() 메서드는 cast 및 instanceof 연산자 대신 에 해당합니다. 위의 예에서 eat() 메서드는 재정의됩니다. 즉, eat() 동물 유형의 변수에 대해 호출되지만, 고양이와 개 등 실제 개체에 호출되는 방법으로 작업이 수행됩니다. 이 고양이의 `render` 메서드를 호출하면 이름을 포함하지 않는 `Animal` 클래스 render() 메서드를 사용한다는 의미입니다.

주로 Cat이 Animal에서 일부 기능을 상속하기 때문에 컴파일 타임 또는 런타임에 예를 들어,()를 이동합니다. (적어도 고양이는 동물이지 않습니까?) 업캐스팅은 오브젝트를 수퍼타입으로 캐스팅하는 것을 의미하며, 다운캐스팅은 하위 유형으로 캐스팅하는 것을 의미합니다. 대신 Animal의 개체로 정의하기 때문에 다운캐스팅이 필요합니다.