java instanceof与isAssignableFrom

1.在类中,instanceof表示一个对象是否是一个类或其父类的实例;
isAssignableFrom表示一个类是否是另一个类的父类。

验证如下:

在类中:
public class Shape {}
public class Rectangle extends Shape{}
public class Square extends Rectangle {}

运行:
Square s = new Square();
System.out.println(s instanceof Square);
System.out.println(s instanceof Rectangle);
System.out.println(s instanceof Shape);

System.out.println(Square.class.isAssignableFrom(Rectangle.class) );
System.out.println(Rectangle.class.isAssignableFrom(Square.class) );
输出结果:
true
true
true
false
true

2.在接口中,instanceof表示一个对象是否是一个接口或其父接口的实例;isAssignableFrom表示一个接口是否是一个类或接口的父接口。

声明两个接口和一个类,具体关系如下:
public interface A {}
public interface B extends A {}
public class C implements B {}
运行:
C c = new C();
System.out.println(c instanceof B);
System.out.println(c instanceof A); 
System.out.println(c.getClass().isAssignableFrom(C.class));
System.out.println(c.getClass().isAssignableFrom(B.class));
System.out.println(B.class.isAssignableFrom(c.getClass()));
System.out.println(A.class.isAssignableFrom(B.class));
输出结果:
true
true
true
false
true
true

你可能感兴趣的:(java)