星空网 > 软件开发 > Java

【Simple Java】Java编译器如何生成重载和覆盖方法代码

下面是一个很简单的例子,关于Java中的多态:方法重载和方法覆盖;

多态指的是方法在不同的时刻表现出不同的形式;在编译期间,这被叫做方法重载;方法重载允许相关的方法被同一个方法名字调用,这有时候被叫做ad-hoc polymorphism;

package simplejava;class A {  public void M(int i) {    System.out.println("int");  }  public void M(String s) {    // this is an overloading method    System.out.println("string");  }}class B extends A {  public void M(int i) {    // this is overriding method    System.out.println("overriden int");  }}public class Q13 {  public static void main(String[] args) {    A a = new A();    a.M(1);    a.M("abc");    A b = new B();    b.M(1234);  }}

那么对于编译器来说,如何生成方法代码以便能被正确调用呢?

静态重载的实现并不难,当处理重载方法声明的时候,将他们绑定到不同的实现,在类型检查的时候,编译器分析参数类型来决定哪个方法被调用;

动态重载允许在运行期间根据实际参数类型来选择不同的方法实现,这是动态分发(dynamic dispatch)的一种形式;

动态分发(dynamic dispatch)同样可以用于实现方法覆盖,被覆盖的方法的调用由运行期间实际对象的类型来决定;

如果需要进一步理解动态分发(dynamic dispatch),可参考如下链接,关于对象在内存中的分布:

http://www.programcreek.com/2011/11/what-do-java-objects-look-like-in-memory/

 

译文链接:http://www.programcreek.com/2011/10/how-java-compiler-generate-code-for-overloaded-and-overridden-methods/




原标题:【Simple Java】Java编译器如何生成重载和覆盖方法代码

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

lazada结汇:https://www.goluckyvip.com/tag/84865.html
选品lazada:https://www.goluckyvip.com/tag/84867.html
lazada 马来:https://www.goluckyvip.com/tag/84868.html
lazada download:https://www.goluckyvip.com/tag/84869.html
副标题费用:https://www.goluckyvip.com/tag/8487.html
lazada买家端:https://www.goluckyvip.com/tag/84871.html
湘西游轮六 湘江游轮夜游:https://www.vstour.cn/a/411226.html
携程旅游网折扣优惠最新攻略(携程旅游网更佳折扣优惠):https://www.vstour.cn/a/411227.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流