猿问

方法重载未按预期工作

在 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");

    }


}

白猪掌柜的
浏览 155回答 2
2回答

慕姐4208626

正如多次提到的,它不应该编译。但是我也看到了您的屏幕截图以及它在您的计算机上实际运行时的困惑。我认为您所看到的 eclipse 有一个“功能”,当它遇到错误时,它会运行该类的旧版本。我假设您之前只使用该int方法构建并运行了该类,然后再添加该方法void。如果是这种情况,您可以做以下几件事:如果您确实想保留此功能(当存在错误时启动旧版本),您可以执行清理(菜单:项目>清理...)以清除先前构建的版本。如果您现在尝试运行,Java 将停止并抱怨它无法构建您的源代码。如果您认为此“功能”实际上可能有害,请转到“窗口”>“首选项”>“运行/调试”>“启动”>“如果项目包含错误则继续启动”>“提示”

千巷猫影

方法的签名必须不同: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);    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答