多态与RTTI

来源:互联网 发布:天谕saber捏脸数据 编辑:程序博客网 时间:2024/05/11 05:40


Java 多态是如何实现的

通过运行时动态绑定, 动态判定当前引用的类型, 调用本类对应的函数,如果没有,则调用父类的函数。 需要根据RTTI需要多对应的信息, 和C++不一样,C++有一种虚表的东西在起作用,是一种前期绑定,而Java属于后期绑定,所以Java的动态其实更简单。


RTTI:

JAVA RTTI的核心是.Class,Class对象存放着对应类所需要的所有的类型信息,包括类的变量,类的属性,类的超类,类实现的借口,类的修饰符,类的对应的类的加载器等等。所有类都在第一次使用时,动态加载入jvm当中,当程序创建对类的第一个静态引用时,就会加载这个类,同时构造器可以看作是一个静态方法。
    jvm是动态加载的,你需要什么我给你加载什么,这样的话,类加载器第一次使用该类时,他会检查这个类的class对象,有没有被加载,如果没有加载,就载入这个class对象,加载时需要对class文件验证,包括文件头,文件大小,文件内容语义检查,各类字符串引用检查等等,载入后,还有链接和初始化等两个步骤。
常常初始化行为被延迟到了对静态方法或者非常量静态域进行首次引用时才被执行。对于常量静态域是因为他在编译器的时候,已经被搞定了。
此外RTTI的表现形式有:
    1.进行类型转换,这个主要是进行向下类型转换时使用,可以概括为:你是什么类型就可以从基类型转化什么类型
    2. 通过查询class对象可以获取运行时的所需的信息


0 0
原创粉丝点击