美文网首页
java方法重载时的调用选择

java方法重载时的调用选择

作者: yunmuzhou丶 | 来源:发表于2019-02-26 19:34 被阅读0次

重载:方法名相同,参数列表不同;参数列表包括参数的个数,类型,不包括参数的返回值,抛出的异常等。
对于方法重载时具体调用的选择,往往不是很清晰,看代码:

public class TestOverload {
    
    //方法1
    public static void method(int a){
        System.out.println("执行method(int a)");
    }
    //方法2
    public static void method(long a){
        System.out.println("执行method(long a)");
    }
    //方法3
    public static void method(Integer a) {
        System.out.println("执行method(Integer a)");
    }
    //方法4
    public static void method(Object a) {
        System.out.println("执行method(Object a)");
    }
    //方法5
    public static void method(int...a) {
        System.out.println("执行method(int...a)");
    }
    
    public static void main(String[] args) {
        int a = 0;
        method(a);
    }
}

对于上述代码,调用哪个方法一目了然,肯定是方法1。

  • 如果注释掉方法1,会调用哪个方法呢?大多数人的选择可能是方法3,int会自动装箱然后调用方法3;但结果调用的是方法2;
  • 如果再注释掉方法2,这个时候是会调用方法3;
  • 如果方法1,2,3都被注释掉呢?是调用方法4还是5呢?调用4或者5都有解释的通的利用,但调用的是方法4;
  • 再注释掉方法4,那调用的肯定是方法5。

如果有下面一段代码:

class A {
    
    public static void method(int a){
        System.out.println("A类中的method()");
    }
}
public class TestOverload extends A{
        //方法4
    public static void method(Object a) {
        System.out.println("执行method(Object a)");
    }
    //方法5
    public static void method(int...a) {
        System.out.println("执行method(int...a)");
    }
    public static void main(String[] args) {
        int a = 0;
        method(a);
    }
}

这时候会调用4还是5呢?看结果:

A类中的method()

答案是调用父类的方法,所以关于方法重载时的调用选择我们可以得出以下结论:

  1. 精确匹配;对于上述代码中,当有method(int a)存在时调用的肯定就是这个方法;
  2. 对于基础数据类型,自动转成表示范围更大的类型;当方法1被注释的时候,会去调用method(long a)而不是method(Integer a);
  3. 自动装箱与拆箱;当方法1,2被注释,就调用方法3;
  4. 根据子类依次向上继承路线匹配;当只有方法4与方法5时,先找int的父类,找到的object类型,匹配之后调用;当继承A类之后,由于本类没有合适的方法,然后就去A类中找,匹配调用(A类中方法参数类型换成long,Integer结果也一样);
  5. 根据可变参数匹配。

相关文章

  • java方法重载时的调用选择

    重载:方法名相同,参数列表不同;参数列表包括参数的个数,类型,不包括参数的返回值,抛出的异常等。对于方法重载时具体...

  • Kotlin @JvmOverloads

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

  • Java 多态

    1、Java 多态分类 1)编译时多态:方法重载。2)运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决...

  • Java中的类的初始化执行流程

    一:Java执行流程,有继承关系无方法重载时 输出结果: 以下是来自<>:1.调用基类的构造器...

  • 方法重载

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

  • 提示五十二:慎用重载

    提示五十二:慎用重载。 重载调用哪个方法是在编译时做出的决定,重写方法是在运行时决定调用哪个方法,所以编译时的类型...

  • Android 组件Activity,Application 子

    在Java我们习惯了方法重载,子承父类的调用 father ff=new son 然后通过ff调用子类的重写的方法...

  • JVM04 Java虚拟机是如何执行方法调用的?

    要调用就要先识别,Java和Java虚拟机是如何识别目标方法的呢?在 Java 中,方法存在重载以及重写的概念,重...

  • 2018-09-10

    Java方法的应用 方法声明、方法调用、方法重载、方法返回值、形参、实参 函数 == 方法 方法:主要是将功能的实...

  • JavaSE之方法

    五、方法 目录:何谓方法、方法的定义及调用、方法重载、命令行传参、可变参数、递归 1.什么是方法? Java方法是...

网友评论

      本文标题:java方法重载时的调用选择

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