Java动态绑定
来源:互联网 发布:智能手机反黄软件 编辑:程序博客网 时间:2024/06/01 08:15
问题引入
package javabasis.OO;/** * Created by admin on 2017/2/14. */public class DongTaiBangDing { public static void main(String[] args) { getInfo(new SeniorSon()); getInfo(new JuniorSon()); } public static void getInfo(Father father){ System.out.println("调用的属性:" + father.name); System.out.print("调用的方法:" ); father.speak(); }}class Father { protected String name = "父亲属性"; protected void speak(){ System.out.println("父亲的方法"); }}class SeniorSon extends Father { protected String name = "大儿子属性"; protected void speak() { System.out.println("大儿子的方法"); }}class JuniorSon extends Father { protected String name = "小儿子属性"; protected void speak() { System.out.println("小儿子的方法"); }}输出结果:
调用的属性:父亲属性
调用的方法:大儿子的方法
调用的属性:父亲属性
调用的方法:小儿子的方法
在getInfo()方法中,形参的是父类对象Father,在调用过程中,传入的实参分别是两个继承父类对象的子类对象,编译器是如何得知具体引用哪个对象的?
在输出结果中,为什么属性总是父类的属性,却调用了子类的方法?
Java的绑定机制
绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对Java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定.
静态绑定:在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由编译器或其它连接程序实现。针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定
动态绑定(后期绑定):在运行时根据具体对象的类型进行绑定。若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。不同的语言对后期绑定的实现方法是有所区别的。但我们至少可以这样认为:它们都要在对象中安插某些特殊类型的信息。
动态绑定(后期绑定):在运行时根据具体对象的类型进行绑定。若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。不同的语言对后期绑定的实现方法是有所区别的。但我们至少可以这样认为:它们都要在对象中安插某些特殊类型的信息。
一旦知道Java中所有方法都是通过动态绑定实现多态这个机制后,我们就可以编写至于基类(父类)打交道的代码了。
与方法不同,在处理java类中的成员变量(包括实例变量和类变量)时,并不是采用运行时绑定,而是一般意义上的静态绑定。所以在向上转型的情况下,对象的方法可以找到子类,而对象的属性还是父类的属性。
因此在编程中,我们一般会通过getter方法访问子类的成语变量。
0 0
- Java【动态绑定、静态绑定】-动态绑定
- java动态绑定静态绑定
- Java动态绑定 静态绑定
- java 静态绑定 动态绑定
- Java 动态绑定,静态绑定
- java&cpp 动态绑定
- Java 动态绑定详解
- Java的动态绑定
- java动态绑定详解
- JAVA动态绑定详解
- [java]动态绑定
- java的动态绑定
- JAVA的动态绑定
- Java的动态绑定
- java的动态绑定
- JAVA动态绑定
- java 多态 动态绑定
- java动态绑定
- oracle 数据类型详解---日期型
- 基于phantomJs的Java后台网页截图技术
- 每天一个linux命令:vmstat命令
- java对象转化成xml文件
- 【B2B】商用电视酒店运营解决方案
- Java动态绑定
- Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC
- 广安麻将的算法
- 为扭转MBG萧条局面联想招揽三星手机高管
- 开发App的心得
- 运用递归输入一串任意长度的字符并输出
- Oracle日期类型转换格式
- GML文件的读取
- 常用的正则表达式