getClass와 instanceof를 동시에 활용하는 예제다. 변수가 참조하고 있는 객체를 확인하는 instanceof와, 현재 참조하고 있는 클래스를 확인할 수 있는 getClass의 개념을 확실히 이해하고 넘어가자.
class Element {int atomicNumber;}
class Point extends Element{int x, y;}
class InstanceofTest {
public static void main(String[] args) {
Element e = new Element();
Point p = new Point();
//p=e; // Element는 Point로 전환될 수 없다
//p=(Point)e; // 컴파일은 되나 실행은 에러난다(부모가 자식이 될 수 없다)
System.out.println("1. e의 레퍼런스 구조 : " + e.getClass());
System.out.println("1. p의 레퍼런스 구조 : " + p.getClass());
System.out.println("1. e instanceof Point" + (e instanceof Point) + "\n\n");
if(e instanceof Point){
System.out.println("Test 1: I get your Point");
}
e=p;
System.out.println("2. e의 레퍼런스 구조 : " + e.getClass());
System.out.println("2. p의 레퍼런스 구조 : " + p.getClass());
System.out.println("2. e instanceof Point" + (e instanceof Point) + "\n\n");
if(e instanceof Point){
System.out.println("Test 2: I get your Point");
System.out.println("3. e의 레퍼런스 구조 : " + e.getClass());
System.out.println("3. p의 레퍼런스 구조 : " + p.getClass());
System.out.println("3. p instanceof Element" + (p instanceof Element) + "\n\n");
}
if(e instanceof Element){
System.out.println("Test 1: I get your Point");
}
}
}
<결과>
1. e의 레퍼런스 구조 : class classes.Element
1. p의 레퍼런스 구조 : class classes.Point
1. e instanceof Pointfalse
2. e의 레퍼런스 구조 : class classes.Point
2. p의 레퍼런스 구조 : class classes.Point
2. e instanceof Pointtrue
Test 2: I get your Point
3. e의 레퍼런스 구조 : class classes.Point
3. p의 레퍼런스 구조 : class classes.Point
3. p instanceof Elementtrue
Test 1: I get your Point
'문돌이의 IT > 자바(Java)' 카테고리의 다른 글
자바(Java) 싱글톤 Singleton (0) | 2016.03.14 |
---|---|
자바(Java) 정적(static)멤버, 정적초기화블럭 (0) | 2016.03.13 |
자바(Java) instanceof 사용방법 (0) | 2016.03.11 |
자바(Java) getClass 메소드 사용방법 (0) | 2016.03.10 |
자바(Java) 상속(Inheritance) super & Override 개념 이해 (0) | 2016.03.09 |