Img profile default
AR
  • 2016.6.9 12:04
  • 조회수 257
  • 답변수 1
Img profile default
AR
  • 2016.6.9 12:04
  • 조회수 257
  • 답변수 1

isInstance 메서드 좀 설명해주시면 안될까요?

isInstance 메서드가 알아보고자 하는 객체가 해당 클래스의 인스턴스인지 확인하는 메서드인가요?
상속받은 서브클래스도 슈퍼클래스의 객체의 인스턴스가 된다는 의미인가요?
레퍼런스를 봐봐도 잘 모르겠습니다 ㅎ

  • #자바 입문
  • #상속 - 실습

1 답변

  • G3rlasealonpd5c2kica
    Demi
    • 2016.6.9 13:01

    Java™ Platform Standard Ed. 7 - isInstance 를 보면

    public boolean isInstance(Object obj)
    
    Determines if the specified Object is assignment-compatible with the object represented by this Class. This method is the dynamic equivalent of the Java language instanceof operator. The method returns true if the specified Object argument is non-null and can be cast to the reference type represented by this Class object without raising a ClassCastException. It returns false otherwise.
    
    Specifically, if this Class object represents a declared class, this method returns true if the specified Object argument is an instance of the represented class (or of any of its subclasses); it returns false otherwise. If this Class object represents an array class, this method returns true if the specified Object argument can be converted to an object of the array class by an identity conversion or by a widening reference conversion; it returns false otherwise. If this Class object represents an interface, this method returns true if the class or any superclass of the specified Object argument implements this interface; it returns false otherwise. If this Class object represents a primitive type, this method returns false.
    

    라고 되어 있습니다. 간략하게 해석하면 어떤 Object가 이 클래스 오브젝트에 할당 호환이 가능(assignmen-compatible)한지 아닌지를 판단하는 메소드 입니다.
    슈퍼 클래스의 객체는 서브 클래스의 객체를 assign 할 수 있지만, 서브 클래스의 객체에 슈퍼 클래스의 객체를 할당하는 것은 불가능 합니다. 따라서 전자의 경우 isInstance는 true를 리턴하고, 후자는 false를 리턴합니다. 다음 코드를 참고하세요.

    class CodeRunner{
        public static void main(String[] args){
            Parent parent = new Parent();
            Child child = new Child();
    
            if(Parent.class.isInstance(parent)) //true
                System.out.println("parent는 Parent클래스의 instance 입니다");
            if(Parent.class.isInstance(child)) //true
                System.out.println("child는 Parent클래스의  instance 입니다");
            if(Child.class.isInstance(child)) // true
                System.out.println("child는 Child클래스의 instance 입니다");
            if(Child.class.isInstance(parent)) // false
                System.out.println("parent는 Child클래스의 instance 입니다");
        }
    }
    
    class Parent{
    }
    
    class Child extends Parent{
    }
    

    • 친절하게 설명해주셔서 정말 감사합니다.-AR
      2016.6.9 15:39

답변 쓰기

이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.