运行时类型识别(run-time type identification RTTI):当只有一个指向对象基类的饮用时,RTTI机制可以让你找出这个对象的确切类型。
10.1 为什么需要RTTI
RTTI不是多态
Java希望我们始终使用多态机制,只在必须的时候使用RTTI
在Java中,RTTI表现在:
1。Class对象,是RTTI的核心,每个类都有一个class对象。每当编写并且编译一个新类,就会产生一个Class对象(被保存在同名的.class文件当中)
2。instanceof 关键字用于检查对象是不是某个特定类型的实例。
3。强制类型转换,如:
Parent object = new Child();
Child child = (Child)object;
instanceof保持了类型概念,它指的是“你是这个类吗,或者你是这个类的派生类吗?”而如果用==比较实际的Class对象,就没有考虑继承——它或者是这个确切类型,或者不是。
10.2 RTTI语法
Java是通过Class对象来实现RTTI机制的
10.3 反射:运行时的类信息
RTTI和反射之间的真正区别只在于,对RTTI来说,编译器在编译时打开和检查.class文件。而对于反射机制来说,.class文件在编译时是不可获取的,所以是在运行时打开和检查.class文件