10 类型检查

分为两种:传统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。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值