Java의 업캐스팅과 다운캐스팅

Java의 업캐스팅과 다운캐스팅

타입캐스팅은 기본적으로 한 데이터 유형을 암시적 또는 명시적으로 다른 데이터 유형으로 변환하는 것을 다루는 가장 중요한 개념 중 하나입니다. 이 글에서는 객체에 대한 타입 캐스팅의 개념을 논의합니다.
데이터 유형과 마찬가지로 객체도 유형 변환이 가능합니다. 그러나 객체에는 상위 객체와 하위 객체라는 두 가지 유형의 객체만 있습니다. 따라서 객체의 타입 캐스팅은 기본적으로 한 유형의 객체(즉, 다른 유형의 하위 또는 상위)를 의미합니다. 타입 캐스팅에는 두 가지 유형이 있습니다. 그들은:

    업캐스팅: 업캐스팅은 타입캐스팅입니다. 하위 개체를 상위 개체로 . 업캐스팅은 암시적으로 수행될 수 있습니다. 업캐스팅을 사용하면 상위 클래스 멤버에 액세스할 수 있는 유연성이 제공되지만 이 기능을 사용하여 모든 하위 클래스 멤버에 액세스할 수는 없습니다. 모든 멤버 대신 하위 클래스의 일부 지정된 멤버에 액세스할 수 있습니다. 예를 들어 재정의된 메서드에 액세스할 수 있습니다. 다운캐스팅: 마찬가지로 다운캐스팅은 상위 개체를 하위 개체로 . 다운캐스팅은 암시적으로 이루어질 수 없습니다.

다음 이미지는 업캐스팅 및 다운캐스팅의 개념을 보여줍니다.

업캐스팅 대 다운캐스팅

예: 부모 클래스가 있게 해주세요. 한 부모에게는 많은 자녀가 있을 수 있습니다. 아이들 중 한 명을 고려해 봅시다. 자식은 부모의 속성을 상속받습니다. 따라서 자식과 부모 사이에는 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 

위 프로그램의 그림은 다음과 같습니다.

업캐스팅-다운캐스팅1

위의 예에서 우리는 다음 사항을 관찰할 수 있습니다.

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