Java学习之旅(四三):使用 instanceof 操作符判断对象类型
当在程序中执行向下转型操作时,如果父类对象不是子类对象的实例,就会发生 ClassCastException 异常,所以在执行向下转型操作之前要养成一个良好的习惯,就是判断父类对象是否为子类对象的实例。这个判断通常使用 instanceof 操作符来完成,可以使用该操作符判断是否一个类实现了某个接口,也可以判断一个实例对象是否属于一个类。instanceof 是 Java 语言的关键字,在 Java 语言中,关键字都为小写。使用 instanceof 操作符的表达式返回值为布尔类型。如果返回值为 true,说明对象为类的实例对象,如果返回为 false,说明对象不是类的实例对象。
// 四边形类
public class Quadrangle {
public static void draw(Quadrangle quadrangle) {
// 四边形类中的方法
}
}
public class Square extends Quadrangle{
// 正方形类,继承自四边形类
}
// 平行四边形类,继承四边形类
public class Parallelogram extends Quadrangle {
public static void main(String[] args) {
// 实例化父类对象
Quadrangle quadrangle = new Quadrangle();
// 判断父类对象是否为 Parallelogram 子类的一个实例
System.out.println(quadrangle instanceof Parallelogram);
if (quadrangle instanceof Parallelogram) {
// 向下转型
Parallelogram parallelogram = (Parallelogram) quadrangle;
}
// 判断父类对象是否为 Square 子类的一个实例
System.out.println(quadrangle instanceof Square);
if (quadrangle instanceof Square) {
// 向下转型
Square square = (Square) quadrangle;
}
}
}

平时若有需要进行向下转换操作时,首先判断一下对象是否为类的实例对象 还是很有必要的。