Step it up now

다운캐스팅 본문

개인공부/java

다운캐스팅

케잉 2024. 7. 11. 21:30

 

부모 변수(poly)가 자식 인스턴스 참조(다형적 참조)

부모는 자식 타입을 받을 수 있다 

Parent poly = new Child();// 참조값 x001

 

 

단, 자식의 기능은 호출할 수 없다.  컴파일 오류 발생함

poly.childMethod(); //불가함

 

 

 

 

 

가능하게 하려면?
다운캐스팅(부모 타입 -> 자식 타입으로 바꿈)

 

 

 

Child child = (Child) poly; 
child.childMethod();  //자식의 메서드 호출 가능

 

자식 타입은 부모 타입을 못 받으니까 타입을 변형한 후에 부모 변수 poly에 있는 참조값 x001을 child에 넣음

 

 

 

 

 

일시적 다운캐스팅 - 해당 메서드를 호출하는 순간만 다운캐스팅

 

 

 

 

(child)poly.childMethod();

 

 

연산자 우선순위 때문에 적용이 안 됨.  괄호로 우선순위 표시

 

((Child) poly).childMethod();

 

 

그렇다고 부모 변수 poly가 child 타입으로 바뀌는 것은 아님

 

 

 

 

주의할 점



  • new Child()로 인스턴스 생성시

자식클래스가 부모클래스까지 포함하기때문에 문제 없음

Parent parent1 = new Child();
Child child1 = (Child) parent1;
child1.childMethod(); //문제 없음

 

 

 

  • new Parent()로 인스턴스 생성시

부모 클래스만 생성된 것. 자식 클래스는 생성되지 않았기 때문에 강제로 다운캐스팅하여도 찾을 수 없다

(인스턴스 내부에 없는 부분을 선택하는 문제가 발생)

Parent parent2 = new Parent();
Child child2 = (Child) parent2; //런타임 오류 - ClassCastException

 

'개인공부 > java' 카테고리의 다른 글

Static 문제 풀이  (0) 2024.08.20
상속 super( );  (0) 2024.07.08
상속시 인스턴스 생성  (0) 2024.07.08
stack 구조  (0) 2024.06.25
package  (1) 2024.06.05