方法重载无法按预期工作

时间:2018-10-22 02:57:26

标签: java eclipse overloading

在Java函数重载中,函数参数的类型或编号是否正确,请纠正我

我正在做一些测试,发现Java重载不正确,例如 public static void doSomeThing()public static int doSomeThing()

这两个函数是相同的,不应编译但仍在运行。

喜欢此代码。

package com.sudeep.test;

public class StaticFunctionOverload {
    public static void main(String arg[]) {
        doSomeThing();

    }

    public static int doSomeThing() {
        System.out.println("Im in int block");
        return -1;
    }

    public static void doSomeThing() {
        System.out.println("Im in void block");
    }

}

Error in code but still running on eclipse

2 个答案:

答案 0 :(得分:2)

方法的签名必须不同:

  

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

阅读:

https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html

因此,这将起作用,例如:

package com.sudeep.test;

public class StaticFunctionOverload {
    public static void main(String arg[]) {
        doSomeThing();

    }

    public static int doSomeThing() {
        System.out.println("Im in int block");
        return -1;
    }

    public static void doSomeThing(int param1) {
        System.out.println("Im in void block with " + param1);
    }

}

答案 1 :(得分:1)

正如多次提到的那样,它不应该进行编译。 但是我也看到了您的屏幕截图以及在计算机上实际运行时的困惑。

我认为您看到的是eclipse的“功能”,它会在遇到错误时运行该类的旧版本。我假设您之前添加int方法之前,仅使用void方法构建和运行了该类。

如果是这种情况,您可以做几件事:

  1. 如果您确实要保留此功能(当存在错误时启动较早版本),可以进行清理(菜单: Project > Clean ... )清除以前构建的版本。如果您现在尝试运行,Java将停止并抱怨它无法构建您的源代码。
  2. 如果您认为此“功能”实际上有害,请转至窗口>首选项>运行/调试>启动>如果项目包含错误,则继续启动>提示

enter image description here