형변환이란?
변수 또는 상수의 타입을 다른 타입으로 변환하는 것
(타입)피연산자
double d = 85.4; int score = (int)d; int score = (int)85.4; int score = 85;
피연산자 d(double)를 integer로 바꿔서 집어넣음
3.6 =>(int) 3 기본형의 형변환은 값이 바뀜
사용할 수 있는 멤버의 갯수를 조절하는 것!
그 외에는 아무것도 변하지 않음!
조상, 자손 관계의 참조변수는 서로 형변환 가능
형제들끼리는 형변환이 불가함~

class Car{}
class FireEngine extends Car{} // 소방차
class Ambulance extends Car{} // 구급차
class Car{
String color;
int door;
void drive(){ // 운전하는 기능
System.out.println("drive, Brrrr~");
}
void stop(){ // 멈추는 기능
System.out.println("stop!!!!");
}
class FireEngine extends Car { // 소방차
void water(){ // 물을 뿌리는 기능
System.out.println("water!!!");
}
}
FireEngine f = new FireEngine();
Car c = (Car)f; // 가능. 조상인 Car 타입으로 형변환(생략 가능), 감소는 항상 안전함 5개 => 4개
FireEngine f2 = (FireEngine)c; // 가능. 자손인 FireEngine타입으로 형변환(생략 불가), 증가는 안전하지않음!! 4개 => 5개
Ambulance a = (Ambulance)f; // 에러. 상속관계가 아닌 클래스간의 형변환은 불가!!
class Ex7_7{
public static void main(String args[]){
Car car = null;
FireEngine fe = null; // 실제 인스턴스가 무엇인지 중요!
FireEngine fe2 = (FireEngine)car; // 조상 => 자손으로 형변환
Car car2 = (Car)fe2; // 자손 => 조상으로 형변환
car2.drive(); // NullPointerException 발생!
}
}

리모콘을 변경!!

업캐스팅
Parent p = new Child();업캐스팅은 암묵적 또는 명시적으로 할 수 있다.
업캐스팅을 하면 하위클래스에만 정의된 멤버변수에는 접근할 수 없다!
다운캐스팅
child c = new Parent; (x) - 이렇게 하면 컴파일 에러가 뜬다. //따라서 반드시 이렇게 해주어야 함. Parent p = new Child(); Child c = (Child)p;
다운캐스팅은형변환 타입을 적어줘어야 함!!
다운캐스팅을 통해 상위, 하위 클래스에 모두 접근 가능하다.java.lang.Object.class
모든 클래스의 최상위 클래스
어떤 클래스도 상속하고 있지 않음
하위 클래스에 물려줄 보편적인 특징이 있다.
extends키워드를 사용하지 않더라도 JVM이 자동으로 상속되었다고 인식하므로 생략해도 된다.
java.lang.* 패키지도 따로 import를 안해도 JVM이 자동으로 인식한다.
Object 타입의 변수는 null, 배열, 인스턴스 등 어떤 객체라도 참조할 수 있다.
toString, equals, clone, wait(notify, notifyAll), finalize