어떤 계층에 속하는지. 클래스의 등급
ex.
public class unit {
public int age;
public void attack() {
System.out.println("critical!");
}
}
public class enemy extends unit {
}
위와 같이 unit과 unit을 상속받은 enemy라는 class가 있을 때, unit과 enemy의 기능이 유사하다.
이 때, unit class인지 enemy class인지 구분할 때 사용하는 것이 instanceof이다.
if('class변수' instanceof 'class이름'){
}
ex.
public static void main(String[] args) {
unit parent = new unit();
if(parent instanceof unit) {
System.out.println("unit 클래스입니다.");
}
}
Tip) 클래스가 상속 관계에 있을 시, 자식 클래스 변수를 instanceof를 사용하여, 부모 클래스 타입이름과 비교하더라도 true를 반환한다.(반대로 부모 클래스는 자식 클래스로 인지되지 않는다)
public static void main(String[] args) {
unit parent = new unit();
enemy child = new enemy();
if(child instanceof unit) {
System.out.println("child는 enemy 클래스이지만, enemy 클래스는 unit 클래스의 자식 클래스이므로 이 문구는 출력된다. ");
}
}
Tip) Object는 모든 클래스의 부모 클래스이므로, 다른 클래스 변수와 instanceof 사용 시, true를 반환한다.
<전체 예시 코드>
// unit class(부모)
public class unit {
public int age;
public void attack() {
System.out.println("critical!");
}
}
// enemy class(자식)
public class enemy extends unit {
}
// main
public class main {
public static void main(String[] args) {
unit parent = new unit();
enemy child = new enemy();
if(parent instanceof unit) {
System.out.println("unit 클래스입니다.");
}
if(child instanceof Object) {
System.out.println("enemy 클래스입니다.");
}
if(child instanceof unit) {
System.out.println("child는 enemy 클래스이지만, enemy 클래스는 unit 클래스의 자식 클래스이므로 이 문구는 출력된다. ");
}
if(child instanceof Object) {
System.out.println("child는 enemy 클래스이지만, Object는 모든 클래스의 부모이므로 이 문구는 출력된다.");
}
}
}