instanceof的用法②
2015-11-07 18:45
211 查看
其实这个问题以前也困扰过我。我个人理解的一个应用场合就是,当你拿到一个对象的引用时(例如参数),
你可能需要判断这个引用真正指向的类。所以你需要从该类继承树的最底层开始,使用instanceof操作符判断,
第一个结果为true的类即为引用真正指向的类。
例如下面的例子:
这个程序的输出结果是:p是类Student的实例
Person类所在的继承树是:Object<--Person<--Student<--Postgraduate。
这个例子中还加入一个Animal类,它不是在Person类的继承树中,所以不能作为instanceof的右操作数。
你可以跑跑程序,应该就明白什么意思了。
你可能需要判断这个引用真正指向的类。所以你需要从该类继承树的最底层开始,使用instanceof操作符判断,
第一个结果为true的类即为引用真正指向的类。
例如下面的例子:
class Person{} class Student extends Person{} class Postgraduate extends Student{} class Animal{} public class InstanceofTester { public static void main(String[] args) { instanceofTest(new Student()); } public static void instanceofTest(Person p){ // 判断p的真正类型 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的实例"); } /*if(p instanceof Animal){//此错编译错误,所以做注释 System.out.println("p是类Animal的实例"); }*/ } }
这个程序的输出结果是:p是类Student的实例
Person类所在的继承树是:Object<--Person<--Student<--Postgraduate。
这个例子中还加入一个Animal类,它不是在Person类的继承树中,所以不能作为instanceof的右操作数。
你可以跑跑程序,应该就明白什么意思了。
相关文章推荐
- 模拟数字小时钟
- isFinite(outDistanceForSort)和isFinite(outDistanceAlongView)的原因
- 让Ecshop网店系统用户自动登陆
- 分析PHP内核中是如何实现 empty, isset 这些函数的
- UI设计师不可不知的安卓屏幕知识
- windows 按时自动化任务
- 【Matlab开发】matlab中bar绘图设置与各种距离度量
- Android HandlerThread例子
- 省市县三级联动
- instanceof的用法①
- UML小结
- 读写速度可达10GB/s的 多磁头多磁道并行存储系统
- Hello World:手动创建第一个ionic应用
- saltstack安装配置(面向零基础的,求大神不吐槽)
- 无名对象的作用
- spring 方法拦截器 MethodInterceptor接口
- 基于 Objective-C 的中级通讯录代码
- 删掉MainStoryBoard
- 使用Fetch API和ES6生成器构建异步API
- PHP文件下载