하나의 데이터 타입을 다른 데이터 타입으로 바꾸는 것
기본형 간에는 아래와 같이 형변환이 가능하다.
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() 등의 메소드를 가지고 있지 않기 때문이다.