9.8 Java编译器如何为重载和重载方法生成代码?

下面是一个简单的Java示例,显示了多态:重载和覆盖。
多态性意味着函数在不同的时间呈现不同的形式。 编译时间称为函数重载。 重载允许通过使用通用名称来访问相关的方法。 它有时被称为ad hoc多态性,而不是参数多态性。

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 static void main(String[] args) {
    A a = new A();
    a.M(1);
    a.M("abc");
 
    A b = new B();
    b.M(1234);
}

从编译器的角度来看,如何为正确的函数调用生成代码?
静态重载不难实现。 在处理重载函数的声明时,新的绑定会将其映射到不同的实现。 在类型检查过程中,编译器分析参数的实际类型以确定使用哪个函数。
动态重载允许在实际参数的运行时类型上选择函数的不同实现。 这是一种动态调度的形式。
动态调度也被用来实现方法覆盖。 重写的方法由运行时的实际对象类型决定。
为了理解动态调度,在内存中有一个关于对象布局的文章。

你可能感兴趣的:(9.8 Java编译器如何为重载和重载方法生成代码?)