[Java] Instanceof

Junseo Kim·2019년 12월 23일
0

[Java]자바 기초

목록 보기
17/35

instanceof

어떤 계층에 속하는지. 클래스의 등급

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는 모든 클래스의 부모이므로 이 문구는 출력된다.");
		}
	}

}

0개의 댓글