class 可以有两个同名的无参数方法吗?

Can a class have two no-args methods with same name?

阅读文档:

https://docs.oracle.com/javase/9/docs/api/java/util/ServiceLoader.html

我被这句话搞糊涂了:

The service provider class file has more than one public static no-args method named "provider".

假设 JavaDoc 是正确的,并且假设 static 成员不是继承的,这在 Java 中怎么可能?还是 JavaDoc 中的错误?

how this might be possible in Java?

不是,因为方法签名必须是唯一的,签名是方法名和参数类型。

除了, JVM 不是这样工作的,只有 Java 是这样工作的。

JVM 包括 return 类型作为签名的一部分,因此从技术上讲,一个 class 可以有多个名称和参数相同但 return 类型不同的方法。

所以它肯定会发生在用其他 JVM 语言编写的 classes 上,但是它会发生在 Java class 上吗?

是的,当您为重写方法设置协变 return 类型时,它可以。参见 Can overridden methods differ in return type?

鉴于 that answer 中的示例,真正发生的是这个假代码:

class ShapeBuilder {
    ...
    public Shape build() {
    ....
}

class CircleBuilder extends ShapeBuilder{
    ...
    @Override
    public bridge Shape build() { // override matches full JVM signature
        return <Circle>build(); // call other method with different return type
    }
    public Circle build() {
    ....
}

"bridge"方法是编译器为了区别Java和JVM正常工作而生成的隐藏方法。

仅供参考: 在这方面,"bridge" 方法类似于 "synthetic" 方法,它们由编译器生成以允许外部 classes 访问内部 classes 的 private 成员,反之亦然。