특정 객체의 타입을 다른 타입으로 변환하는 것
업캐스팅은 자식 클래스 타입의 객체를 부모 클래스 타입으로 변환하는 것을 말한다.(자식 → 부모)
Parent parent = child;
parent.method1(); // Parent 클래스의 메서드 호출
parent.method2(); // Child 클래스에서 오버라이드된 메서드 호출
parent 변수는 Parent 클래스 타입이지만, Child 클래스의 인스턴스를 참조한다.Parent 클래스에 정의된 method1을 호출하고, Child 클래스에서 오버라이드된 method2를 호출한다.다운캐스팅은 업캐스팅의 반대 과정으로, 부모 클래스 타입의 객체를 자식 클래스 타입으로 변환하는 것을 말한다.(부모 → 자식)
**ClassCastException**에러가 발생한다.Parent parent = new Child(); // 자식을 부모로 형변환
Child child = (Child) parent; // 부모에서 자식으로 명시적 형변환
child.method1(); // Parent 클래스의 메서드 호출
child.method2(); // Child 클래스의 메서드 호출
child.method3(); // Child 클래스의 메서드 호출
parent는 Child 클래스의 인스턴스를 참조하는 Parent 타입의 변수입니다.parent를 Child 타입으로 다운캐스팅하는 것이 가능하며, child를 통해 Child 클래스에만 존재하는 method3에 접근할 수 있게 된다.ClassCastException을 발생시킬 수 있다. 따라서, instanceof 연산자를 사용하여 형변환 대상 객체의 타입을 확인하는 것이 필요할 수 있다.