instanceof
클래스들의 크기를 비교한다.
여기서 할아버지(인터페이스) – 아버지(클래스)- 아들(클래스)가 있다고 가정한다.
다음과 같은 결과가 나온다.
1. 아들은 아버지의 인스턴스이다 (참)
2. 아들은 할아버지의 인스턴스이다 (참)
3. 아버지는 할아버지의 인스턴스이다 (참)
여기까지는 너무나 당연하다.
4. 할아버지에 아버지를 오버라이딩한 클래스는, 할아버지의 인스턴스이다 (참)
5. 할아버지에 아버지를 오버라이딩한 클래스는, 아버지의 인스턴스이다 (참)
6. 할아버지에 아버지를 오버라이딩한 클래스는, 아들의 인스턴스이다 (거짓)
※ 참고) 할아버지에 아버지를 오버라이딩한 클래스 : 할아버지 a=new 아버지();
7. 아버지에 아들을 오버라이딩한 클래스는, 할아버지의 인스턴스이다 (참)
8. 아버지에 아들을 오버라이딩한 클래스는, 아버지의 인스턴스이다 (참)
9. 아버지에 아들을 오버라이딩한 클래스는, 아들의 인스턴스이다 (참)
※ 참고) 아버지에 아들을 오버라이딩한 클래스 : 아버지 a=new 아들();
——————————————————————————————————–
interface GF{};
class F implements GF{};
class S extends F{};
public class MainClass {
public static void main(String[] args) {
F f=new F();
S s=new S();
if(s instanceof F){
System.out.println(“1. 아들은 아버지의 인스턴스이다”);//TRUE
}
if(s instanceof GF){
System.out.println(“2. 아들은 할아버지의 인스턴스이다”);//TRUE
}
if(f instanceof GF){
System.out.println(“3. 아버지는 할아버지의 인스턴스이다”);//TRUE
}
GF a1=new F();
F a2=new S();
if(a1 instanceof GF){
System.out.println(“4. 할아버지에 아버지를 오버라이딩한 클래스는, 할아버지의 인스턴스이다”);//TRUE
}
if(a1 instanceof F){
System.out.println(“5. 할아버지에 아버지를 오버라이딩한 클래스는, 아버지의 인스턴스이다”);//TRUE
}
if(a1 instanceof S){
System.out.println(“6. 할아버지에 아버지를 오버라이딩한 클래스는, 아들의 인스턴스이다(거짓)”);//FALSE
}
if(a2 instanceof GF){
System.out.println(“7. 아버지에 아들을 오버라이딩한 클래스는, 할아버지의 인스턴스이다”);//TRUE
}
if(a2 instanceof F){
System.out.println(“8. 아버지에 아들을 오버라이딩한 클래스는, 아버지의 인스턴스이다”);//TRUE
}
if(a2 instanceof S){
System.out.println(“9. 아버지에 아들을 오버라이딩한 클래스는, 아들의 인스턴스이다”);//TRUE
}
}
}