[JAVA] 객체의 형 변환

집 가고 싶다.·2024년 1월 3일

JAVA

목록 보기
23/33
post-thumbnail

1. 객체의 형변환

  • 자바의 객체 참조 변수는 형변환(casting)이 가능하다.
  • 서로 다른 클래스의 객체 참조 변수 간에는 일정한 규칙이 있다.
  • 부모-자식 관계에서 왼쪽(부모)과 오른쪽(자식) 객체 유형이 상속 관계에 있으면 암묵적 형변환이 가능하다.
  • 상속 관계에서 하위 클래스 유형을 상위 클래스 유형으로 할당하는 것은 가능하지만 그 반대는 명시적 형변환이 필요하다.

2. 객체 간의 암묵적 형 변환

  • 암묵적 형변환은 부모를 상속받는 자식 객체의 기능을 부모에게 물려받은 기능만 사용 가능하게 한다.
  • 객체 간의 암묵적 형변환은 그림과 같이 다양한 상황에서 발생할 수 있다.
  • 암묵적 형변환은 오버라이드된 메서드만 사용 가능하며 추가로 구현한 기능은 사용할 수 없다.

3. 암묵적 형변환과 메서드 오버라이드

  • 암묵적 형변환은 오버라이드된 메서드만 사용 가능하며, 추가적으로 구현한 기능은 사용할 수 없다.
  • 암묵적 형변환은 기능을 제한하는 것이지 변경하는 것은 아니다.

4. 명시적 형변환

  • 상속 관계의 객체를 부모 형태로 변환하면 클래스의 종류를 구분하지 않고 일관된 기능을 호출할 수 있다.
  • 부모 클래스의 객체를 자식 클래스 형태로 변환하는 것이 명시적 형변환이다.
  • 명시적 형변환은 추가로 구현한 기능을 사용할 수 없게 되므로 원래의 기능을 다시 사용하려면 부모 형태로 변환해야 한다.

5. 명시적 형변환의 조건

  • 객체가 최초 생성될 때 자식 클래스 형태로 생성되고, 부모 형태로 암묵적 형변환이 된 상태일 때만 명시적 형변환이 가능하다.

6. 명시적, 암묵적 형 변환 가능 여부

  • 명시적, 암묵적 형변환은 최초 객체 생성과 상속 구조에 따라 가능 또는 불가능하다.
  • 문법 오류는 없지만 프로그램 실행 시에 오류가 발생할 수 있다.

예제

// 부모 클래스
class Parent {
    void display() {
        System.out.println("Parent Display");
    }
}

// 자식 클래스
class Child extends Parent {
    void show() {
        System.out.println("Child Show");
    }

    // 메서드 오버라이드
    @Override
    void display() {
        System.out.println("Child Display");
    }
}

public class Main {
    public static void main(String[] args) {
        // 암묵적 형변환
        Parent p = new Child();
        p.display();  // Child Display (오버라이드된 메서드 호출)
        // p.show();  // 컴파일 에러: Parent에는 show 메서드가 없음

        // 명시적 형변환
        Child c = (Child) p;
        c.show();  // Child Show
        c.display();  // Child Display
    }
}
profile
틀린거 있으면 알려주세요.

0개의 댓글