/*
* instanceof运算符用法
* 运算符是双目运算符,左面的操作元是一个对象,右面是一个类.当
* 左面的对象是右面的类创建的对象时,该运算符运算的结果是true,否则是false
*
* 说明:(1)一个类的实例包括本身的实例,以及所有直接或间接子类的实例
* (2)instanceof左边操作元显式声明的类型与右边操作元必须是同种类或有继承关系,
* 即位于继承树的同一个分支上,否则会编译出错
*/
class Person {
}
class Student extends Person {
}
class Postgraduate extends Student {
}
class Animal {
}
public class Test {
public static void main(String[] args) {
instanceofTest(new Student());
}
/**
* 这个程序的输出结果是:p是类Student的实例
*
* Person类所在的继承树是:Object<--Person<--Student<--Postgraduate。
*
* 这个例子中还加入一个Animal类,它不是在Person类的继承树中,所以不能作为instanceof的右操作数。
*
* @param p
*/
public static void instanceofTest(Person p) {
// p 和 Animal类型不一样,彼此之间没有继承关系,编译会出错
// 提示错误:Incompatible conditional operand types Person and Animal
// if(p instanceof Animal){
// System.out.println("p是类Animal的实例");
// }
//下面代码的除了第一行都会输出
if (p instanceof Postgraduate) System.out.println("p是类Postgraduate的实例");
if (p instanceof Person) System.out.println("p是类Person的实例");
if (p instanceof Student) System.out.println("p是类Student的实例");
if (p instanceof Object) System.out.println("p是类Object的实例");
// 判断p的真正类型
//下面代码只有第二个if会输出结果,这里我们需要了解if - else if - else
//的语法,它们中按顺序执行只要遇到满足条件的语句就会跳出,无论后面的条件是否为真
if (p instanceof Postgraduate) {
System.out.println("p是类Postgraduate的实例");
} else if (p instanceof Student) {
System.out.println("p是类Student的实例");
} else if (p instanceof Person) {
System.out.println("p是类Person的实例");
} else if (p instanceof Object) {
System.out.println("p是类Object的实例");
}
}
}
instanceof用法
最新推荐文章于 2022-05-03 11:19:12 发布