package ch04_casting;
public class Base {
private String item;
public Base() {
item = "기본 무기";
}
public void baseAttack() {
System.out.println(item + " 사용");
}
}
--------------------------------------------------------------------------------
//UnitA
package ch04_casting;
public class UnitA extends Base{
private String unitItem;
public UnitA() {
unitItem = "방어막";
}
public void unitAttack() {
System.out.println(unitItem + " 사용");
}
}
--------------------------------------------------------------------------------
//UnitB
package ch04_casting;
public class UnitB {
}
--------------------------------------------------------------------------------
//CastingTest
package ch04_casting;
/*
* instanceof 연산자
* → 참조 변수가 현재 사용중인 객체 타입을 확인할 때 사용.
* 타입 같으면 true, 다르면 false 입니다.
*/
public class CastingTest {
public static void main(String[] args) {
// 먼저 부모타입인 Base의 영역이 만들어지고, 자식타입인 UnitA의 영역이 만들어짐.
UnitA userA = new UnitA();
userA.baseAttack();
userA.unitAttack();
System.out.println();
Base base = userA; // UP casting : 자식의 객체를 부모에게 넘기는 현상.
base.baseAttack();
// base.unitAttack(); Error ! why? 객체를 사용중인 참조변수가 중요 ! 참조변수 보고 타입을 확인하기 때문에..
System.out.println();
userA = (UnitA) base; // DOWN casting : 자료의 형변환으로 인식하여, 변환 타입 지정.
userA.unitAttack();
userA.baseAttack();
System.out.println();
// base변수가 사용하고 있는 객체 타입이 UnitA이 사용하고 있는것과 맞은지 확인하는 함수. 참: true , 거짓 : false
// unitB의 존재가능성 때문에 한 번 체크하고 넘김.
if (base instanceof UnitA) {
userA = (UnitA)base;
}
}
}
→