본문 바로가기
java

다형성

by wjdtmdgjs 2024. 8. 1.

참조 변수의 타입 변환

  • 자동 타입 변환

부모 타입 변수 = 자식 타입 객체; 는 자동으로 부모 타입으로 변환이 일어납니다

자식 객체는 부모 객체의 멤버를 상속받기 때문에 부모와 동일하게 취급될 수 있습니다.

  • 강제 타입 변환

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

부모 타입 객체는 자식 타입 변수로 자동으로 타입 변환되지 않습니다.

이럴 때는 (자식 타입) 즉, 타입 변환 연산자를 사용하여 강제로 자식 타입으로 변환할 수 있습니다.

       

다만 무조건 강제 타입 변환을 할 수 있는 것은 아닙니다.

자식 타입 객체가 부모 타입으로 자동 타입 변환된 후 다시 자식 타입으로 변환될 때만 강제 타입 변환이 가능합니다.

부모 타입 변수로는 자식 타입 객체의 고유한 멤버를 사용할 수 없기 때문에 사용이 필요한 경우가 생겼을 때 강제 타입 변환을 사용합니다.

  • 다형성 
    • 다형성이란 ‘여러 가지 형태를 가질 수 있는 능력’을 의미합니다.
    • 일전에 배운 참조 변수 타입 변환을 활용해서 다형성을 구현할 수 있습니다.
      • Tire tire = new HankookTire("HANKOOK");
        Tire tire = new KiaTire("KIA");
    • 부모 타이어 변수 = 자식 타이어 객체;를 선언하여 자동 타입 변환된 변수를 사용하여 각각의 자식 타이어 객체에 재정의 된 메서드를 통해 다양한 승차감을 가진 자동차를 생성할 수 있습니다
      • public Car(Tire tire) {
            this.tire = tire;
        }

        ...

        Car car1 = new Car(new KiaTire("KIA"));
        Car car2 = new Car(new HankookTire("HANKOOK"));
    • 매개변수에도 다형성이 적용될 수 있습니다.
    • Car 생성자에서 매개변수의 타입이 부모 타이어이기 때문에 자식 타이어 객체들을 매개값으로 전달할 수 있습니다.
      • Tire getHankookTire() {
            return new HankookTire("HANKOOK");
        }

        Tire getKiaTire() {
            return new KiaTire("KIA");
        }

        ...

        Tire hankookTire = car1.getHankookTire();
        KiaTire kiaTire = (KiaTire) car2.getKiaTire();
    • 반환 타입에도 다형성이 적용될 수 있습니다
    • 반환 타입이 부모 타이어이기 때문에 자식 타이어 객체들을 반환값으로 지정할 수 있습니다.
    • 또한 자동 타입 변환이 된 반환값인 자식 타이어 객체를 강제 타입 변환할 수도 있습니다.

'java' 카테고리의 다른 글

인터페이스  (0) 2024.08.23
static이란!  (0) 2024.08.17
Java  (0) 2024.07.31
getter&setter  (0) 2024.07.29
객체지향  (0) 2024.07.26