重载或正常方法

时间:2016-11-10 10:57:01

标签: java overloading

我将提出这个问题,以清楚地了解在Java中重载概念。根据我的理解,重载编译器中的方法解析将寻找方法签名,它应该具有相同的方法名称和不同的参数类型。但是如果返回类型不同呢?

class Test{
    public void m1(int i) {
    System.out.println(" int arg");
}

public int m1(String s) {
    System.out.println("String-arg");
    return (5+10);
}

public static void main (String[] args) throws java.lang.Exception
{
    Test t = new Test();
    t.m1(5);
    int i = t.m1("ani");
    System.out.println(i);
}}

上述程序运行完美。我怀疑的是,方法m1()是否重载?它有不同的返回类型。有人请说清楚。提前致谢

2 个答案:

答案 0 :(得分:2)

Java方法中,通过名称和参数的类和数量来识别。返回类型不标识方法。因此,以下代码是非法的:

public void m1(String i) {

    System.out.println(" int arg");
}

public int m1(String s) {

    System.out.println("String-arg");
    return (5+10);
}
  

如果一个类的两个方法(无论是在同一个类中声明,还是由一个类继承,或者一个是声明的,一个是继承的)具有相同的名称,但签名不是覆盖等价的,那么方法名称是据说超载了。 (...)当调用方法(第15.12节)时,在编译时使用实际参数的数量(以及任何显式类型参数)和参数的编译时类型来确定方法的签名将被调用(§15.12.2)。如果要调用的方法是实例方法,则将在运行时使用动态方法查找(第15.12.4节)确定要调用的实际方法

总结一下,两个具有相同名称的方法可以返回不同的类型,但是在决定调用哪个方法时不会考虑它们。 JVM首先决定调用哪个方法,然后检查该方法的返回类型是否可以分配给某个变量。

示例(尽量避免这种结构):

public int pingPong(int i) {
    return i;
}
public String pingPong(String s) {
    return s;
}
public boolean pingPong(boolean b) {
    return b;
}

答案 1 :(得分:0)

如果我们遵循Oracle定义,那么,这是一个重载方法

这里是info(强调我的)

  

Java编程语言支持重载方法和Java   可以区分具有不同方法签名的方法。 :此   表示类中的方法可以具有相同的名称 ,如果它们具有   不同的参数列表(对此有一些资格   将在标题为“#34;接口和继承"”的课程中讨论。

对于重载定义,方法返回值的事实是IRRELEVANT ......

另一件事是这里为什么一个方法可以返回一个值,有时候没有...

这会让人们使用代码变得疯狂,但那是另一个问题......