개발 일지/Java

[Java] 참조 변수의 타입 변환

미숫가루설탕많이 2022. 12. 30. 13:10

 참조 변수의 타입 변환은 '사용할 수 있는 멤버의 개수를 조절하는 것'을 의미한다.

 

 타입 변환을 위해서는 다음의 세 가지 조건을 충족해야 한다.

 

  1. 서로 상속관계에 있는 상위 클래스와 하위 클래스 사이에서만 타입 변환이 가능하다.
  2. 하위 클래스 타입에서 상위 클래스 타입으로 타입 변환(업캐스팅)은 형변환 연산자(괄호)를 생략할 수 있다.
  3. 상위 클래서에서 하위 클래스 타입으로 변환(다운캐스팅)은 형변환 연산자(괄호)를 반드시 명시해야 한다.

 

package Practice;

class Vehicle {
    String model;
    String color;
    int wheels;

    void startEngine() {
        System.out.println("시동 걸기");
    }
    void accelerate() {
        System.out.println("가속하기");
    }
    void brake() {
        System.out.println("브레이크");
    }
}

class MotorBike extends Vehicle {
    void performance() {
        System.out.println("묘기 부리기");
    }
}

class Car extends Vehicle {
    void giveRide() {
        System.out.println("다른 사람 태우기");
    }
}

public class HelloJava {
    public static void main(String[] args) {
        Car car = new Car();
        Vehicle vehicle = (Vehicle) car;
        Car car2 = (Car) Vehicle;
        MotorBike motorBike = (MotorBike) car;
    }
}

 

 위 코드를 실행시켜보면 아래와 같은 에러가 발생한다.

 

에러 발생

 

 이는 Car 클래스와 MotorBike 클래스가 상속관계가 아니기 때문에 타입 변환이 불가하여 에러가 발생하는 것이다.

 

 이처럼 상속 관계에 있는 클래스 간에는 상호 타입 변환이 자유롭게 수행될 수 있다. 다만, 하위 클래스를 상위 클래스 타입으로 변환하는 경우에는 타입 변환 연산자(괄호)를 생략할 수 있지만 반대의 경우는 타입 변환 연산자를 꼭 명시해야 한다는 점에서 차이가 있다. 

'개발 일지 > Java' 카테고리의 다른 글

[Java] 추상화(Abstraction)  (0) 2022.12.30
[Java] instanceof 연산자  (0) 2022.12.30
[Java] 다형성(Polymorphis)  (0) 2022.12.30
[Java] getter과 setter 메서드  (2) 2022.12.29
[Java] 캡슐화(Encapsulation)  (0) 2022.12.29