(6) 업캐스팅 vs 다운캐스팅

Chaeyun·2024년 1월 29일
0

Java

목록 보기
6/6

캐스팅(형변환)이란?

하나의 데이터 타입을 다른 데이터 타입으로 바꾸는 것

기본형 간에는 아래와 같이 형변환이 가능하다.

int n = 10;
float f = (float) n;

업캐스팅과 다운캐스팅이란?

기본형 타입을 형변환 하듯이 참조형 타입도 상속 관계에 있는 부모와 자식 클래스 간에 형변환이 가능하다.
이 때 자식 클래스를 부모 클래스로 형변환하는 것을 업캐스팅, 부모 클래스를 자식 클래스로 형변환하는 것을 다운캐스팅이라고 한다.

public class Animal {
	public void run() {
    	System.out.println("Animal is running");
    }
}

public class Dog extends Animal {
	public void run() {
    	System.out.println("Dog is running");
    }
    
    public void bark() {
    	System.out.println("bowwow");
    }
}

public class Cat extends Parent {
	public void run() {
    	System.out.println("Cat is running");
    }
    
    public void meow() {
    	System.out.println("meow");
    }
}

업캐스팅

Dog dog = new Dog();
Animal anm = (Animal) dog;
Animal anm = dog; // 업캐스팅은 묵시적 형변환 가능

다운캐스팅

Dog dog = new Dog();
Animal anm = dog;

Dog dog1 = (Dog) anm; // 다운캐스팅은 명시적 형변환만 가능

부모 자식 상속 관계면 항상 캐스팅이 가능한가요?

다운캐스팅은 업캐스팅한 객체를 되돌릴 때만 가능하다.

아래 예시를 보자.

Animal anm = new Animal();
Dog dog = (Dog) anm; // ClassCastException 발생

위의 코드를 실행하면 ClassCastException이 발생한다.
이는 anm 변수가 Dog 클래스에서 가지고 있어야 하는 bark() 등의 메소드를 가지고 있지 않기 때문이다.

References

0개의 댓글

관련 채용 정보