
Java多态概述:(引荐:java视频教程)
多态是面向对象编程言语的重要特征,它许可基类的指针或援用指向派生类的对象,而在细致接见时完成要领的动态绑定。Java 关于要领挪用动态绑定的完成重要依赖于要领表,但经由历程类援用挪用(invokevitual)和接口援用挪用(invokeinterface)的完成则有所差别。
java中完成多态须要三个前提:
1、须要有继续关联的存在。
2、须要有要领的重写。
3、须要有父类的援用指向子类对象。
类援用挪用的大抵历程为:Java编译器将Java源代码编译成class文件,在编译历程当中,会依据静态范例将挪用的标记援用写到class文件中。
在执行时,JVM依据class文件找到挪用要领的标记援用,然后在静态范例的要领表中找到偏移量,然后依据this指针肯定对象的现实范例,运用现实范例的要领表,偏移量跟静态范例中要领表的偏移量一样,如果在现实范例的要领表中找到该要领,则直接挪用,不然,以为没有重写父类该要领。根据继续关联从下往上搜刮。
从上图能够看出,当顺序运行时,须要某个类时,类载入子系统会将响应的class文件载入到JVM中,并在内部竖立该类的范例信息(这个范例信息实在就是class文件在JVM中存储的一种数据结构),包含java类定义的一切信息,包含要领代码,类变量、成员变量、以及本博文要重点议论的要领表。这个范例信息就存储在要领区。
注重,这个要领区中的范例信息跟在堆中寄存的class对象是差别的。在要领区中,这个class的范例信息只要唯一的实例(所以是各个线程同享的内存地区),而在堆中能够有多个该class对象。能够经由历程堆中的class对象接见到要领区中范例信息。就像在java反射机制那样,经由历程class对象能够接见到该类的一切信息一样。
更多java学问请关注java基础教程栏目。
以上就是java怎样完成多态的细致内容,更多请关注ki4网别的相干文章!