【问题标题】:Overloading or a normal method [duplicate]重载或正常方法[重复]
【发布时间】:2016-11-10 19:06:47
【问题描述】:

我将提出这个问题,以便对 java 中的重载 Concept 有一个清晰的认识。根据我的理解,重载编译器中的方法解析将寻找方法签名,即它应该具有相同的方法名称和不同的参数类型。但是如果返回类型不同呢??

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() 是否重载?它有不同的返回类型。有人请说清楚。提前致谢

【问题讨论】:

    标签: java overloading


    【解决方案1】:

    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;
    }
    

    【讨论】:

      【解决方案2】:

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

      这里是info(强调我的)

      Java 编程语言支持重载方法,而 Java 可以区分具有不同方法签名的方法。 这个 表示类中的方法可以具有相同的名称 如果它们有 不同的参数列表(对此有一些限制条件 将在标题为“接口和继承”的课程中讨论)。

      方法是否返回值的事实对于重载定义来说是无关紧要的......

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

      这会让使用代码的人发疯,但这是另一个问题...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-05
        • 1970-01-01
        相关资源
        最近更新 更多