gpt4 book ai didi

JAVA:具有相同名称的方法?

转载 作者:行者123 更新时间:2023-11-29 10:02:27 25 4
gpt4 key购买 nike

在 Main 方法中,我调用了 foo(1),它打印出“foo a”。所以我不明白为什么编译器不给我一个错误,因为这两个方法具有相同的名称。

我也尝试将它们设置为私有(private)和公共(public),但仍然有效..

然后当我将“foo b”方法放在“foo a”之上时,它会打印“foo b”。那么编译器是不是按顺序搜索方法呢?

这是所有的代码,

public class Practice{

public static void main(String[] args) {
foo(1);
}


private static void foo(int n){
System.out.println("foo a");
}

public static void foo(int n){
System.out.println("foo b");
}

}

最佳答案

嗯。我无法编译它。

我认为这可能是与 How does Java distinguish these multiple methods with the same name/signature? 类似的问题.

您是从某处复制粘贴方法,还是直接输入?

也许这也是之前编译工作的遗留问题。您是否尝试清理您的项目(/删除可执行文件),然后重新编译/运行?

注意:代码不会正常编译。您需要在 Eclipse 上忽略错误才能编译它。

嗯,真的很管用!我现在认为这一定是 eclipse 的一个怪癖,因为我仍然无法使用 javac 对其进行编译。当你使用eclipse强制编译时,它必须将第一个视为有效。第二个抛出编译器错误,随后被 eclipse 忽略。因此,您总是打印链中第一个方法的结果。

eclipse

按照 Narendra Pathai 的建议并在编译的 .class 文件上运行 javap 确实只显示一个 foo 方法:) [是的,我添加了 -private 标志]。

(结果):编译自“Practice.java”

public class Practice extends java.lang.Object{
public Practice();
public static void main(java.lang.String[]);
public static void foo(int);
}

(如果你交换公私):编译自“Practice.java”

public class Practice extends java.lang.Object{
public Practice();
public static void main(java.lang.String[]);
private static void foo(int);
}

关于JAVA:具有相同名称的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20014655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com