java的动态绑定与双分派

java的动态绑定与双分派

ID:37955769

大小:606.09 KB

页数:5页

时间:2019-06-03

java的动态绑定与双分派_第1页
java的动态绑定与双分派_第2页
java的动态绑定与双分派_第3页
java的动态绑定与双分派_第4页
java的动态绑定与双分派_第5页
资源描述:

《java的动态绑定与双分派》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Java的动态绑定与双分派Java的动态绑定所谓的动态绑定就是指程执行期间(而不是在编译期间)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。java继承体系中的覆盖就是动态绑定的,看一下如下的代码:1.classFather{2.publicvoidmethod(){3.System.out.println("ThisisFather'smethod");4.}5.}6.7.classSon1extendsFather{8.publicvoidmethod(){9.System.out.println("ThisisSon1'smethod");10.}11.

2、}12.13.classSon2extendsFather{14.publicvoidmethod(){15.System.out.println("ThisisSon2'smethod");16.}17.}18.19.publicclassTest{20.publicstaticvoidmain(String[]args){21.Fathers1=newSon1();22.s1.method();23.24.Fathers2=newSon2();25.s2.method();26.}27.}运行结果如下:ThisisSon1'smethodThisisSon2'smeth

3、od通过运行结果可以看到,尽管我们引用的类型是Father类型的,但是运行时却是调用的它实际类型(也就是Son1和Son2)的方法,这就是动态绑定。在java语言中,继承中的覆盖就是是动态绑定的,当我们用父类引用实例化子类时,会根据引用的实际类型调用相应的方法。1/5java的静态绑定相对于动态绑定,静态绑定就是指在编译期就已经确定执行哪一个方法。在java中,方法的重载(方法名相同而参数不同)就是静态绑定的,重载时,执行哪一个方法在编译期就已经确定下来了。看一下代码:1.classFather{}2.classSon1extendsFather{}3.classSon2e

4、xtendsFather{}4.5.classExecute{6.publicvoidmethod(Fatherfather){7.System.out.println("ThisisFather'smethod");8.}9.10.publicvoidmethod(Son1son){11.System.out.println("ThisisSon1'smethod");12.}13.14.publicvoidmethod(Son2son){15.System.out.println("ThisisSon2'smethod");16.}17.}18.19.publiccla

5、ssTest{20.publicstaticvoidmain(String[]args){21.Fatherfather=newFather();22.Fathers1=newSon1();23.Fathers2=newSon2();24.25.Executeexe=newExecute();26.exe.method(father);27.exe.method(s1);28.exe.method(s2);29.}30.}运行结果如下:ThisisFather'smethodThisisFather'smethodThisisFather'smethod2/5在这里,程序在

6、编译的时候就已经确定使用method(Fatherfather)方法了,不管我们在运行的时候传入的实际类型是什么,它永远都只会执行method(Fatherfather)这个方法。也就是说,java的重载是静态绑定的。instanceof操作符与转型有时候,我们希望在使用重载的时候,程序能够根据传入参数的实际类型动态地调用相应的方法,也就是说,我们希望java的重载是动态的,而不是静态的。但是由于java的重载不是动态绑定,我们只能通过程序来人为的判断,我们一般会使用instanceof操作符来进行类型的判断。我们要对method(Fatherfather)进行修改,在方法

7、体中判断运行期间的实际类型,修改后的method(Fatherfather)方法如下:1.publicvoidmethod(Fatherfather){2.if(fatherinstanceofSon1){3.method((Son1)father);4.}elseif(fatherinstanceofSon2){5.method((Son2)father);6.}elseif(fatherinstanceofFather){7.System.out.println("ThisisFather'smethod");

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。