java

24. 클래스의 형 변환

dalc3154 2025. 2. 25. 17:21

자바에서의 형 변환에는 변수& 자료형의 자동 형 변환(묵시적 형 변환),과 강제 형 변환(명시적 형 변환)이 있다

 

클래스의 관계에서도 형 변환이 가능하다

클래스의 형 변환에는 자동 타입 변환(Upcasting), 강제 타입 변환(Downcasting)이 있으며 자료형의 변환보다 가능한 범위가 좁음

>>클래스의 형 변환은 상속 관계에 있는 클래스 사이에서만 변환되기 때문

 

상속 관계의 클래스들 예시)

class Parent {
	void displayInfo() {
		System.out.println("부모 클래스 입니다");
	}
}

class Child extends Parent {
	@Override
	void displayInfo() {
		System.out.println("자식 클래스입니다, 재정의");
	}
	void childMethod() {
		System.out.println("자식 클래스만이 가진 메소드입니다");
	}
}

 

형 변환

public class E_Class_Type {
	public static void main(String[] args) {
		// 자동 타입 변환(Upcasting): 자식 객체를 부모 클래스 타입으로 변환
		// 직접 명시 X, 자동으로 타입 변환이 일어남
		
		// 1.자식 객체를 생성하면서 즉시 부모 타입으로 변환하여 저장
		// 부모클래스 객체변수 = new 자식클래스();
		Parent childObject = new Child();
		
		childObject.displayInfo();// 자식 클래스입니다, 재정의
		//childObject.childMethod();
		
		// 자동 형 변환의 경우 해당 객체는 보존되면서, 부모 객체처럼 사용
		// 두 클래스 간의 공통된 특성이 아닌 경우 자식만의 기능은 사용할 수 없다
	
		// 2.이미 생성된 객체를 부모 타입으로 변환
		Child childObject2 = new Child();
		childObject2.displayInfo();// 자식 클래스입니다, 재정의
		childObject2.childMethod();// 자식 클래스만이 가진 메소드입니다
		
		// 부모클래스 객체변수 = 자식객체변수;
		Parent parentObject = childObject2;// 업캐스팅
		parentObject.displayInfo();
		//parentObject.childMethod();
		
		// 강제 타입 변환(Downcasting, 다운캐스팅)
		// '부모 클래스 타입으로 변환된 객체'를 다시 자식 클래스 타입으로 변환하는것
		// 자식 클래스에만 정의된 멤버에 다시 접근 가능
		
		// 자식타입 객체변수 = (자식타입) 부모객체;
		Child child = (Child) parentObject;
		child.displayInfo();// 자식 클래스입니다, 재정의
		child.childMethod();// 자식 클래스만이 가진 메소드입니다
		
		// 클래스 타입 변환 시 주의점: 반드시 상속 관계와 객체의 실제 타입을 확인
		// >> 잘못된 캐스팅은 Exception이 발생
		
	}
}

E