타입캐스팅은 기본적으로 한 데이터 유형을 암시적 또는 명시적으로 다른 데이터 유형으로 변환하는 것을 다루는 가장 중요한 개념 중 하나입니다. 이 글에서는 객체에 대한 타입 캐스팅의 개념을 논의합니다.
데이터 유형과 마찬가지로 객체도 유형 변환이 가능합니다. 그러나 객체에는 상위 객체와 하위 객체라는 두 가지 유형의 객체만 있습니다. 따라서 객체의 타입 캐스팅은 기본적으로 한 유형의 객체(즉, 다른 유형의 하위 또는 상위)를 의미합니다. 타입 캐스팅에는 두 가지 유형이 있습니다. 그들은:
- 업캐스팅: 업캐스팅은 타입캐스팅입니다. 하위 개체를 상위 개체로 . 업캐스팅은 암시적으로 수행될 수 있습니다. 업캐스팅을 사용하면 상위 클래스 멤버에 액세스할 수 있는 유연성이 제공되지만 이 기능을 사용하여 모든 하위 클래스 멤버에 액세스할 수는 없습니다. 모든 멤버 대신 하위 클래스의 일부 지정된 멤버에 액세스할 수 있습니다. 예를 들어 재정의된 메서드에 액세스할 수 있습니다. 다운캐스팅: 마찬가지로 다운캐스팅은 상위 개체를 하위 개체로 . 다운캐스팅은 암시적으로 이루어질 수 없습니다.
다음 이미지는 업캐스팅 및 다운캐스팅의 개념을 보여줍니다.

예: 부모 클래스가 있게 해주세요. 한 부모에게는 많은 자녀가 있을 수 있습니다. 아이들 중 한 명을 고려해 봅시다. 자식은 부모의 속성을 상속받습니다. 따라서 자식과 부모 사이에는 is-a 관계가 있습니다. 그러므로 아이는 암묵적으로 업캐스트 부모에게. 그러나 부모는 자녀의 재산을 상속받을 수도 있고 그렇지 않을 수도 있습니다. 그러나 우리는 강제로 부모를 자식에게 캐스팅할 수 있습니다. 다운캐스팅 . 이러한 유형의 캐스팅을 명시적으로 정의한 후 컴파일러는 이러한 유형의 캐스팅이 가능한지 여부를 백그라운드에서 확인합니다. 가능하지 않은 경우 컴파일러는 ClassCastException을 발생시킵니다.
차이점을 이해하기 위해 다음 코드를 이해해 보겠습니다.
자바
자식 리베이스
// Java program to demonstrate> // Upcasting Vs Downcasting> // Parent class> class> Parent {> >String name;> >// A method which prints the> >// signature of the parent class> >void> method()> >{> >System.out.println(>'Method from Parent'>);> >}> }> // Child class> class> Child>extends> Parent {> >int> id;> >// Overriding the parent method> >// to print the signature of the> >// child class> >@Override> void> method()> >{> >System.out.println(>'Method from Child'>);> >}> }> // Demo class to see the difference> // between upcasting and downcasting> public> class> GFG {> >// Driver code> >public> static> void> main(String[] args)> >{> >// Upcasting> >Parent p =>new> Child();> >p.name =>'techcodeview.com'>;> >//Printing the parentclass name> >System.out.println(p.name);> >//parent class method is overridden method hence this will be executed> >p.method();> >// Trying to Downcasting Implicitly> >// Child c = new Parent(); ->컴파일 시간 오류> >// Downcasting Explicitly> >Child c = (Child)p;> >c.id =>1>;> >System.out.println(c.name);> >System.out.println(c.id);> >c.method();> >}> }> |
>
>산출
마침표 키
techcodeview.com Method from Child techcodeview.com 1 Method from Child>
위 프로그램의 그림은 다음과 같습니다.

위의 예에서 우리는 다음 사항을 관찰할 수 있습니다.
- 업캐스팅 구문:
Parent p = new Child();>
- 업캐스팅은 내부적으로 수행되며 업캐스팅으로 인해 객체는 부모 클래스 멤버와 자식 클래스가 지정한 멤버(재정의된 메서드 등)에만 액세스할 수 있지만 모든 멤버에는 액세스할 수 없습니다.
// This variable is not // accessible p.id = 1;>
- 다운캐스팅 구문:
Child c = (Child)p;>
- 다운캐스팅은 외부에서 수행되어야 하며 다운캐스팅으로 인해 하위 개체가 상위 개체의 속성을 얻을 수 있습니다.
c.name = p.name; i.e., c.name = 'techcodeview.com'>