<p>关于多态:Father f=new Son();要记住的无非
<ol>
<li>静态变量和方法:编译和运行看左边(父类)</li>
<li>成员变量:编译和运行看左边</li>
<li>成员方法:编译看左边,运行看右边</li>
</ol>
</p>
<p>关于这些的理解找了网上的一些东西</p>
<h4>(1)静态和动态绑定机制(static binding and auto binding)</h4>
<p>静态绑定是指在编译期间JVM就确定了变量的值或者具体的方法的机制,而动态绑定是在运行时根据具体在堆中创建的对象JVM进行确认的。所有的成员变量,静态方法,final方法以及private修饰的方法(其实private默认带final)都采用的是静态绑定机制,而成员方法采用的是动态绑定。具体情况就是编译阶段进行类的加载时,会将各种静态放入方法区,各种常量以及方法名称和final方法放入常量池,然后会构造一个方法表,每个类都有一个方法表,是在编译的时候就确认的,放置着方法和其在方法区位置的对应关系,这个就是动态绑定机制的实现关键,顺序根据从父到子的顺序放置,如果出现重写方法(overwrite)则直接改变其地址。所以在编译时,如果father没有该方法,则father类的方法表中无此记录,调用则会发生编译错误(编译并未创建对象根据数据类型判断),所以编译看左边,而运行时,f为son的引用,调用方法时JVM根据f引用找到位于堆区的son对象,然后找到son类的方法表,调用方法,所以运行看右边。</p>
多态的理解以及动态绑定机制
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Java学习记录--动态绑定静态绑定的内幕 标签(空格分隔): java 本文转载自:爪哇人作者名: Heart....