美文网首页
9.8 Java编译器如何为重载和重载方法生成代码?

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

作者: 明翼 | 来源:发表于2017-12-31 09:03 被阅读12次

下面是一个简单的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编译器如何为重载和重载方法生成代码?

    下面是一个简单的Java示例,显示了多态:重载和覆盖。多态性意味着函数在不同的时间呈现不同的形式。 编译时间称为函...

  • 详解Kotlin中的Jvm注解

    @JvmStatic 告诉jvm生成静态方法和成员@JvmOverloads 生成Java重载方法,应用于kotl...

  • 方法重载

    方法重载 21. 辨别方法重载 在调用重载方法时,编译器会根据方法的参数个数、参数类型和方法属性(const 方法...

  • 02Dart:并不支持构造函数的重载

    Java 代码中,使用了重载构造函数的方法,该方法在 Java 中很普遍,重载的构造函数和之前的构造函数具有相同的...

  • 方法重载与方法重写(@Overload @Override)

    java方法重载和方法重写(方法覆盖)的区别: 方法重载: Overload 方法重写: Override 批判,...

  • JVM方法调用

    方法重载和方法重写多态是面向对象程序设计的重要特性,方法重载和方法重写是Java语言实现多态的主要形式。方法重载指...

  • Java中重载和覆盖(重写)的区别

    Java中重载和覆盖(重写)的区别 1,基本概念 重载(Overload) Java中的方法重载发生在同一个类里面...

  • Kotlin @JvmOverloads

    意思就是他会给有默认参数的方法生成重载方法,在Java调用Kotlin时

  • Kotlin中@JvmOverloads 注解

    含义:方法的重载,类似于在java中对多个构造函数、多个方法的重载 可能还是云里雾里,直接上代码,代码解释一切: ...

  • PHP编程开发技巧:PHP中重载如何实现

    PHP编程开发技巧:PHP中重载如何实现,重载分为属性重载和方法重载,在PHP中的重载和在其它编程语言的重载不一样...

网友评论

      本文标题:9.8 Java编译器如何为重载和重载方法生成代码?

      本文链接:https://www.haomeiwen.com/subject/djeogxtx.html