IT/Java

[Java] 자동 타입 변환 & 강제 타입 변환

Huitopia 2024. 3. 8. 00:14
728x90

클래스 변환은 상속 관계에 있는 클래스에서 발생한다.

자동 타입 변환(Promotion)

상속 관계에서 자식이 부모 타입으로 타입 변환하는 것을 클래스의 자동 타입 변환이라 한다.

부모타입 변수 = 자식타입객체;

Child child = new Child();
Parents parents = child;
Parents parents = new Cat();

Parents와 Child 변수는 타입만 다르고 동일한 Child 객체를 참조한다.

바로 위의 부모가 아니더라도 상속 계층에서 상위 타입이라면 자동 타입 변환이 가능하다.

상속 관계에 있지 않으면 컴파일 에러가 나타난다.

예제 코드

더보기
package ch07.sec07.exam02;

public class Parent {
    // 메소드 선언
    public void method01() {
        System.out.println("Parent-method1");
    }
    // 메소드 선언
    public void method02() {
        System.out.println("Parent-method2");
    }
}
package ch07.sec07.exam02;

public class Child extends Parent {
    // 메소드 오버라이딩
    @Override
    public void method02() {
        System.out.println("Child-method2");
    }
    // 메소드 선언
    public void method03() {
        System.out.println("Child-method3");
    }
}
package ch07.sec07.exam02;

public class ChildExample {
    public static void main(String[] args) {
        // 자식 객체 생성
        Child child = new Child();
        // 자동 타입 변환
        Parent parent = child;
        parent.method01();
        parent.method02();
//        parent.method03(); // 호출 불가
    }
}

method03은 자식 클래스의 메소드라 호출할 수 없다.

 

 

강제 타입 변환(Casting)

부모 타입을 자식으로 변환하는 것을 강제 타입 변환이라 한다. 자식 타입이 부모 타입으로 자동 타입 변환되고 난 후 다시 자식 타입으로 타입 변환을 할 때만 강제 타입 변환이 가능하지 모든 부모 타입이 자식 타입으로 강제 타입 변환은 될 수 없다.

자식타입 변수 = (자식타입) 부모타입객체;

Parent parent = new Child(); // 자동 타입 변환
Child child = (Child) parent; // 강제 타입 변환

주로 자동 타입 변환 후 자식 타입에 선언된 필드와 메소드를 꼭 사용해야할 때 강제 타입 변환을 해서 다시 자식 타입으로 변환 후 사용한다.

 

 

 

 

 

728x90