java 当中的方法只有 nal,static,private 和构造方法是前期绑定,其他的方法全部为动态绑定。
针对 static 方法和 nal 方法由于不能被继承,因此在编译时就可以确定他们的值,他们是属于前期绑定的。
特别说明的一点是,private 声明的方法和成员变量不能被子类继承,所有的 private 方法都被隐式的指定为 nal 的
(由此我们也可以知道:将方法声明为 nal 类型的一是为了防止方法被覆盖,二是为了有效的关闭 java 中的动态绑定)。
java 中的后期绑定是有 JVM 来实现的,我们不用去显式的声明它,而 C++则不同,必须明确的声明某个方法具备后期绑定。
java 当中的向上转型或者说多态是借助于动态绑定实现的,所以理解了动态绑定,也就搞定了向上转型和多态。
JAVA 虚拟机调用一个类方法时,它会基于对象引用的类型(通常在编译时可知)来选择所调用的方法。相反,当虚拟机调用一个实例方法时,它会基于对象实际的类型( 只能在运行时得知) 来选择所
调用的方法,这就是动态绑定,是多态的一种。动态绑定为解决实际的业务
问题提供了很大的灵活性,是一种非常优美的机制。
1. JAVA 对象模型
JAVA 虚拟机规范并没有规定 JAVA 对象在堆里是如何表示的。对象的内部表示也影响着整个堆以及垃圾收集器的设计,它由虚拟机的实现者决定。JAVA 对象中包含的基本数据由它所属的类及其所
有超类声明的实例变量组成。只要有一个对象引用,虚拟机就必须能够快速地定位对象实例的数据。另外,它也必须能通过该对象引用访问相应的类数据(存储于方法区的类型信息),因此在对象中通
评论0
最新资源