강의로 돌아가기
걸음마

MeterExam에서 boolean a = Meter.class.isInstance(taxi); 부분이 이해가 가지 않습니다

MeterExam.java 에서 boolean a = Meter.class.isInstance(taxi); 부분이 이해가 가지 않습니다.

taxi가 인스턴스인지 확인하는 구문인건가요..? Meter.java에서 Meter는 class가 아니라 interface가 아닌지..ㅠㅠ 클래스랑 인터페이스는 다른거아닌가요 왜 Meter.class.isInstance로 구문이 이어지는지 이해가 잘 가지 않습니다.

작성중인 코드―Taxi.java
1
2
3
4
5
6
7
8
9
public class Taxi implements Meter {
    // Meter인터페이스의 start와 stop메소드를 구현해야 합니다.
    public void start(){

    }
    public int stop(int distance){
        return distance*2;
    }
}
작성중인 코드―Meter.java
1
2
3
4
public interface Meter {
    public abstract void start();
    public abstract int stop(int distance);
}
작성중인 코드―MeterExam.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 아래는 실행을 위한 코드입니다. 수정하지 마세요.
public class MeterExam {
    public static void main(String[]args){
        Taxi taxi = new Taxi();
        boolean a = Meter.class.isInstance(taxi);

        if(a!=true){
            System.out.println("Taxi클래스는 Meter인터페이스를 구현해야 합니다.");
        }
        else if(taxi.stop(200)!=400){
            System.out.println("stop(200)의 값은 400이어야 합니다.");
        }
        else{
            System.out.println("정답입니다. [제출]을 누르세요.");
        }
    }
}
1 개의 답변
Demi

Java Platform SE 8 Official document - inInstance에 따르면

isInstance(Object obj)
Determines if the specified Object is assignment-compatible with the object represented by this Class. ...생략... 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.

라고합니다. inInstance는 주로 어떤 객체가 해당 클래스의 인스턴스인지 아닌지를 검사합니다. 다만, 어떤 객체가 Interface를 구현한 클래스(상속도 포함)의 인스턴스인 경우에도 true를 리턴합니다.

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