Java instanceof 运算符

    |     2015年3月30日   |   Java面向对象   |     0 条评论   |    1529

多态带来一个实际问题:变量声明类型是父类,怎么判断它实际引用的对象是哪一种?Java 用 instanceof 运算符。

obj instanceof Type 看的是对象的真实类型,不是变量的声明类型。真实对象是 Type 本身,或 Type 的子类,结果为 true。

一、继承链

class People {
}
class Teacher extends People {
}
class President extends Teacher {
}

链是 Object → People → Teacher → President。越往下越具体。

二、同一变量,两种实际对象

public class Demo {
    public static void main(String[] args) {
        People obj = new People();
        if (obj instanceof Object) {
            System.out.println("我是一个对象");
        }
        if (obj instanceof People) {
            System.out.println("我是人类");
        }
        if (obj instanceof Teacher) {
            System.out.println("我是一名教师");
        }
        if (obj instanceof President) {
            System.out.println("我是校长");
        }
        System.out.println("-----------");

        obj = new Teacher();
        if (obj instanceof Object) {
            System.out.println("我是一个对象");
        }
        if (obj instanceof People) {
            System.out.println("我是人类");
        }
        if (obj instanceof Teacher) {
            System.out.println("我是一名教师");
        }
        if (obj instanceof President) {
            System.out.println("我是校长");
        }
    }
}
// 运行结果:
// 我是一个对象
// 我是人类
// -----------
// 我是一个对象
// 我是人类
// 我是一名教师
实际对象 instanceof Object / People instanceof Teacher / President
new People() true / true false / false
new Teacher() true / true true / false

Teacher 是 People 的子类,所以 new Teacher() instanceof People 为 true;People 不是 Teacher,所以第一段不会打印「我是一名教师」。向下问更具体的类型,只有实际对象够「具体」才为 true。

一句话总结:instanceof 问的是堆上那个对象是不是某类型或其子类,不问变量写成了什么类型。

转载请注明来源:Java instanceof 运算符
本文链接地址:https://ai.zhousir.top/?p=87

上一篇:

下一篇:

回复 取消