分为两种:传统RTTI和reflection
传统RTTI: 多态时用到。基类引用子类,调用多态方法时进行RTTI。
强制类型转换。 检查是否能转,不能转抛出异常,(运行时)
获取Class对象的方法: Class.forName(); Object.class;
stiatic函数,在类首次载入时运行。(按需运行)
new 一个对象 == c = Class.forName(); c.newInstance(); 后者灵活些。
object instanceof “class name” == Class.isInstance(object);
reflection: 传统RTTI编译时就要获取class文件。reflection在运行时获取class文件。
(zz)
RTTI与多态到底有什么区别呢?
查了相关资料以后,稍微明白点,看来还是自己基础只是不扎实啊。
在多态的运用中,基类定义方法,子类重写或者重载该方法。在实际编程中,往往用基类的引用去代表继承自该类的所有子类,那么该引用调用的方法必须是基类中 已经定义的。这样的话,在程序运行的时候,编译器自动发现是基类还是它的继承类,从而调用相应的方法。(我猜想,编译器就是通过RTTI发现类型信息 的)。
这样,使用多态机制的方法调用时,必须我们先知道了基类定义了什么方法,这就要求我们对基类定义的控制权。如果基类是来自一个库或者由别人控制,这时候 RTTI就是一种解决之道:可以继承一个新类,然后添加你要的方法。在代码的其他地方,可以检查你自己特定的类型,并调用你自己的方法。
所以说RTTI可以说和多态没有关系,但是我想在多态的实现机制上,肯定用到了RTTI。