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;
        }
    }
}

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