检查有效的重载

时间:2014-12-26 08:35:27

标签: java oop overloading

我想知道这是否是有效的重载:

public class OverLoadingTest{

     private void callFunction(Object object){
              System.out.println("Printing Object");
     }

     private void callFunction(String string){
              System.out.println("Printing String");
     }

}

此外,因为有人问我这个问题。 如果我喜欢这个,

OverLoadingTest test = new OverLoadingTest();
test.callFunction(null);

会打印什么?

当然我的意见是它根本没有有效的重载。 所以第二部分没问题。

请通过一些解释告诉我这件事。

2 个答案:

答案 0 :(得分:3)

调用具有最小通用参数的方法。因此,在您的情况下,它将是接受String

的方法

注意:如果2个类处于同一级别,那么您将收到模糊调用异常。例如,如果一种方法采用String而另一种采用Exception

答案 1 :(得分:2)

If more than one member method is both accessible and applicable to a method 
invocation, it is necessary to choose one to provide the descriptor for 
the run-time method dispatch.
The Java programming language uses the rule that the most specific method is chosen.

JSL 15.12.2.5

中查看更多详情
  • 在您的情况下,如果参数为Stringnull,则将调用String方法,并且将调用其他参数的类型Object方法。
  • 在您的示例中,如果您定义另一个参数类型不是String的方法(例如Integer),则无法编译源,因为在{{1}的方法之间调用它是不明确的和String因为它们是同一级别。