참조 타입은 다른 타입으로 변환될 수 있지만, 반드시 변환되는 객체사이에 관계가 있어야 합니다.
기본 데이터 타입(Primitive Data Type)을 객체로 취급해야 하는 경우에 사용
java.lang 패키지에 포함
int primitiveTypeVariable = 1;
Integer wrapperType = new Integer(primitiveTypeVariable);
Integer wrapperType2 = new Integer(2);
wrapperType.toString();
wrappertype.equals(wrapperType2);
Wrapper 클래스는 산술 연산을 위해 정의된 클래스가 아니므로, 인스턴스에 저장된 값을 변경할 수 없습니다. Value world의 값을 Reference world로 가져가서 객체처럼 사용하기 위한 목적으로 사용되어, 생성된 인스턴스의 값을 참조만 할 수 있습니다.
Boxing : 기본 데이터 타입을 Wrapper 클래스의 인스턴스로 변환하는 과정
Unboxing : Wrapper 클래스를 기본 데이터 타입으로 변환하는 과정
Integer number = new Integer(20); // Boxing
int i = number.intValue(); // Unboxing
Integer number = 1;
int i = number;
class Animal {
void eat() {}
}
class Bird extends Animal {
void fly() {}
}
Animal a;
Bird b = new Bird();
a = b;
a = (Animal)b;
Animal 타입인 a 는 eat 메소드만을 가지고 있습니다. Animal 을 상속하는 Bird 타입인 b 는 eat 와 fly 두 메소드를 가집니다. b 가 a 로 변환되면, 즉 Bird 타입에서 Animal 타입으로 변환되면 b 는 Bird 의 인스턴스이지만 Animal 타입이므로 Animal 이 가진 eat 메소드만을 가지게 됩니다.
Bird b = (Bird)a;
객체의 타입을 확인하는데 사용
변환 가능하면 true를 반환
Hero hero;
if (h instanceof Hero) { //true 반환
hero = (Hero)ironMan;
}
else {
System.out.println("Not a hero");
}
Hero h = new Hero();
if (h instanceof IromMan) //false 반환
Object object;
IronMan ironMan = new IronMan();
object = ironMan;
object = (Object)ironMan;
ironMan instanceof Object; // true
인터페이스는 인터페이스에 정의된 멤버에 액세스 하는 데만 사용됨
인터페이스에서 파생된 클래스에 정의된 메소드 및 변수는 인터페이스를 통해 액세스 할 수 없음
IFlyable canFly;
IronMan ironMan = new IronMan();
canFly = ironMan;
if (ironMan instanceof IFlyable) // true