美文网首页
Java解惑46

Java解惑46

作者: 猴猴猪027 | 来源:发表于2017-06-29 12:03 被阅读0次

理论

Java在调用同名函数时,如果实参满足多个同名函数的不同形参。那么最为精确的一个方法会被调用。例如test(Object object)和test(String string)都满足时。会选择更精确的一个方法。
何为更精确,如果有方法A,方法B,如果方法A的所有入参可以作为方法B的入参,同时方法B有的入参不能作为方法A的入参,那么就说A比B要精确(实用范围更小)

例子

这里有两个例子:

public class Confusing {


    private Confusing(Object o){
        System.out.println("Object");
    }
    
    private Confusing(double[] dArray){
        System.out.println("double array");
    } 
    
    public static void main(String[] args){
        new Confusing(null);
    }

}

运行结果如下:

Connected to the target VM, address: '127.0.0.1:58636', transport: 'socket'
double array

其实在ide中null前面已经显示是dArray,因为double[]也是引用类型,Object也是引用类型,能作为double[]参数的一定可以作为Object的参数。

另一个例子:

public class Eat {

    public static void eatSomething(Object object){
        System.out.println("eat object");
    }

    public static void eatSomething(Integer count){
        System.out.println("eat Integer");
    }

//    public static void eatSomething(String count){
//        System.out.println("eat String");
//    }
}

public class Confusing {


    private Confusing(Object o){
        System.out.println("Object");
    }

    private Confusing(double[] dArray){
        System.out.println("double array");
    }

    public static void main(String[] args){
       Eat.eatSomething(null);
    }

}

结果是

Connected to the target VM, address: '127.0.0.1:58671', transport: 'socket'
eat Integer

如果把注释去掉,main方法所在的类无法编译通过,因为有两个精确度一样的方法,不知道选择哪一个。

相关文章

  • Java解惑46

    理论 Java在调用同名函数时,如果实参满足多个同名函数的不同形参。那么最为精确的一个方法会被调用。例如test(...

  • Java学习资料汇总全

    《JAVA解惑[JAVA PUZZLERS]》 《Java虚拟机规范(Java_SE_7)》 Java语言规范:基...

  • Java集合解惑

    本文取自工匠若水的qq群里的Java基础题目,把里面有关Java集合放在一起。全文github地址 35.Arra...

  • Java解惑48

    看代码 最后的打印结果是woof woof 解释 如果方法不是静态的,子类中进行重写,预示着要根据进行动态的分派;...

  • Java接口解惑

    每个学过Java的程序员,当学到“接口”这一章节时,教科书里一般都会写这样一句话:“Java没有多继承,但引入了接...

  • 安装jdk12

    版本号对应关系 Java 1.2 uses major version 46 Java 1.3 uses majo...

  • Java-volatile的作用

    参考来源 java volatile关键字解惑 使用volatie的场景 如何保证内存的可见性 在java虚拟机的...

  • java 线程同步解惑

    1.每个对象都有一把锁,这个锁(对象)又有属于它的两个池,锁池(Entry Set)和等待池(Wait Set)。...

  • Java集合--HashMap解惑

    3 Map 昨晚去了鸟巢,膜拜了5位40多岁的大爷们。算上这次,已是第三回了,每一次都有不同的感受、体验。期待,下...

  • java并发copyonwritelist解惑

    直接干: > 喜欢java并发编程的请加群:736156823 1.jdk版本jdk-8u121-linux-x6...

网友评论

      本文标题:Java解惑46

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