티스토리 뷰

Instanceof

  • 참조변수의 인스턴스타입을 확인하며 boolean값을 반환.

    void work (Car c) {
      if(c instanceof FireEngine) {
        FireEngine fe = (FireEngine)c; 
        fe.water(); 
        ... 
      } else if(c instanceof Ambulance) {
        Ambulance a = (Ambulance)c;
        a.siren(); 
        ...
      }
    }
    

    Car 클래스의 참조변수 c가 어떤 인스턴스타입인지 확인하여 작업을 수행한다. 조상타입의 참조변수로는 실제 인스턴스 멤버들을 모두 사용할 수 없기 때문에 실제 인스턴스와 같은 타입의 참조변수로 형변환해야만 인스턴스의 모든 멤버를 사용할 수 있다.

  • instanceof의 결과가 true면 그 타입으로 형변환해도 문제가 없다는 뜻이다.

    FireEngine fe = new FireEngine();
    
    fe instanceof FireEngine // true
    fe instanceof Car // true
    fe instanceof Object // true
    
      
    class Car {}
    class FireEngine extends Car {}
    

    FireEngine클래스는 Object, Car클래스로부터 상속받았기 때문에 FireEngine 인스턴스는 Object 인스턴스와 Car 인스턴스를 포함하고 있는 셈이기 때문에 모두 true를 반환한다.

 

참조변수와 인스턴스 연결

  • 예시

    public class Main {
    
        public static void main(String[] args) {
    	    Parent p = new Child();
    	    Child c = new Child();
    
            System.out.println(p.x); // prints 200
            System.out.println(c.x); // prints 100
    
            p.method(); // prints "Child Method"
            c.method(); // prints "Child Method"
        }
    }
    
    class Parent {
        int x = 200;
        void method(){
            System.out.println("Parent Method");
        }
    }
    
    class Child extends Parent {
        int x = 100;
        void method(){
            System.out.println("Child Method");
        }
    }
    

    Child의 인스턴스인데, Parent 타입의 참조변수인 경우와 child 타입의 참조변수인 경우에는 차이점이 있다.

    첫번째는 참조할 수 있는 멤버의 범위가 다르다는 것이고, 두번째는 접근하는 멤버변수가 달라진다는 것이다.

    위의 예시에서 조상클래스 Parent의 인스턴스 변수 x, 메서드 method는 자식클래스 Child에서 중복 정의되고 오버라이딩되었다. 이 때 메서드의 경우, 동일하게 자식클래스의 메서드 즉 오버라이딩된 메서드를 출력하지만, 변수의 경우 참조타입의 멤버변수로 접근한다.

    만약 인스턴스 변수를 중복 정의하지 않은 경우, 선택의 여지가 없기 때문에 조상클래스의 멤버를 호출한다.

'Java' 카테고리의 다른 글

인터페이스(Interface)  (0) 2019.05.12
여러 타입의 객체를 배열로 다루기(+ toString())  (0) 2019.05.12
다형성  (0) 2019.05.12
제어자  (0) 2019.05.09
오버라이딩, Super, Super()  (0) 2019.05.08
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함