<—— 강제형변환 / 자동형변환 —–>
byte < short, char < int < long < float < double
크기가 작은 타입을 크기가 더 큰 타입으로 바꿀 때에는 묵시적으로 형을 바꾸어 준다.
"큰 변수 = 작은변수" 이렇게 바로 대입이 가능
// 1. 정수를 실수형 자료형으로 넣으면 (프로모션하면) 기존 정수형 값은 소숫점이 붙습니다.
int i = 100;
float f = i; //f의 값이 100.0 나온다
// 2. char형을 int에 넣으면
char c = '가';
int ii = c;//ii에는 44032 라는 숫자가 저장되어 있습니다.(유니코드)
2.강제 변환 (명시적) - casting
큰 것을 작은 것에 넣을때 문제 발생
크기가 더 큰 타입을 작은 타입으로 바꿀 때에는 명시적으로 변환 해주어야 한다.
float f = 100325198712124.1123f;
int i = (int) f;
System.out.println("값은? " + i); //i가 2147483647 출력
// float값이 int의 값의 범위를 넘어서 담지 못하고 숫자가 날아가버림
// int의 최대값(2,147,483,647)까지만 담았다.
클래스끼리의 형 변환
부모타입으로 자식객체를 참조하게 되면 부모가 가지고 있는 메소드만 사용할 수 있다. 자식객체가 가지고 있는 메소드나 속성을 사용하고 싶다면 형변환 해야 한다.
// class make / call - 객체 생성
GrandFather g = new GrandFather();
Father f = new Father();
Me m = new Me();
// UP - cast
GrandFather gg = new Father();
Father ff = new Me();
// Down - cast
// Father ff = (Father) new GrandFather();
// err 런타임에러, new로 생성하자마자 갑자기 자식으로 내려가는 것은 불가능
Father f4 = (Father) gg;
*요약*
// 부모 클래스는 자식클래스에 extends라고 적힌 "내 부모는 당신" 이라는 정보를
// 일단 알아야 자바가 자동으로 형변환(업캐스팅)을 시켜주면서 정보를 들고 다녀야만,
// 다시 자식으로 돌아가는 형변환(다운 캐스팅)을 할때 "아 내 자식이다." 라고
// 에러 없이 돌아갈 수 있는 것이죠.