gpt4 book ai didi

java - 是否有理由不能拥有具有相同签名的静态和非静态方法?

转载 作者:行者123 更新时间:2023-12-01 16:49:46 25 4
gpt4 key购买 nike

我刚刚意识到以下内容无法编译:

class MyCoolClass {
static void do(){..}
void do(){..}
}

是否有充分的理由不允许这样做?也许这会导致我目前缺少的一些问题?

我目前看到的唯一问题是有人可能尝试调用静态方法,但实际上调用了非静态方法。但这听起来与相互隐藏的子类上的静态方法相当,所以我不认为这是一个“好的”理由。

如果认为对象的方法是在该方法的第 0 个参数上调用的,那么该方法的重载甚至是非常正常的。

如果您想知道:我想要这个,因为它允许将 new MyCoolClass().do() 创建为 MyCoolClass.do() 的快捷方式> 或使用静态导入,即使是 do()

最佳答案

这是因为Java编译器使用方法的名称和参数类型的有序列表来唯一标识类中的方法。 static 是修饰符标志,不被视为唯一标识的一部分。唯一标识在运行时也很重要,因为类文件仅包含标识方法所需的那些键。方法所在的类名,然后是方法名,然后是参数列表。

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html#jvms-5.4.3.3

关于java - 是否有理由不能拥有具有相同签名的静态和非静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42950184/

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