Casting
- 캐스팅(형변환)이란
변수 또는 상수의 타입을 다른 타입으로 변환하는 것
변수가 원하는 정보를 다 가지고 있다.
-
활용
다형성: 오버라이딩된 함수를 분리해서 사용
상속: 캐스팅을 통해 범용적인 프로그래밍 -
종류
묵시적 형변환(업캐스팅): 캐스팅이 자동 발생
Animal dog = new Dog();
명시적 형변환(다운캐스팅): 캐스팅할 내용을 적어줘야함
다운캐스팅은 업캐스팅 발생 이후에 작용한다.
Animal dog = new Dog();
Dog c = (Dog) p;
class Animal {
int name;
Animal() {}
Animal(int name) {
this.name = name;
}
void printInfo() {
System.out.println("Animal");
}
}
class Dog extends Animal {
String name;
Dog() {}
Dog(int age, String name) {
super(age);
this.name = name;
}
@Override
void printInfo() {
System.out.println("Dog");
}
}
public class Main {
public static void main(String[] args) {
Animal p = new Dog();
p.printInfo();
Dog c = (Dog) new Animal();
}
}
- p.printInfo();
Dog 출력
자바에서는 오버라이딩된 함수를 동적 바인딩하기 때문에, Animal에 담겼어도 Dog의 printInfo() 함수를 불러오게 된다.
- Dog c = (Dog) new Animal();
런타임 에러
컴파일 과정에서는 데이터형의 일치만 따진다. 프로그래머가 따로 (Dog)로 형변환을 해줬기 때문에 컴파일러는 문법이 맞다고 생각해서 넘어간다. 하지만 런타임 과정에서 Dog 클래스에 Animal 클래스를 넣을 수 없다는 것을 알게 되고, 런타임 에러가 나오게 되는것!
Author And Source
이 문제에 관하여(Casting), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@parkchanjong/Casting저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)