为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

隔江千里 2023-07-28 10:15:52
我对这句话感到困惑:服务提供者类文件有多个名为public static“”的无参数方法provider。假设 JavaDoc 是正确的,并且假设static成员不是继承的,那么这在 Java 中怎么可能呢?或者这是JavaDoc中的错误?
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

这在 Java 中怎么可能实现?

事实并非如此,因为方法签名必须是唯一的,而签名是方法名称和参数类型。

不过,这不是 JVM 的工作原理,而是 Java 的工作原理。

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

所以对于用其他 JVM 语言编写的类肯定会发生这种情况,但是对于 Java 类会发生这种情况吗?

是的,当您有重写方法的协变返回类型时,它可以。真正发生的是这个假代码:

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() {

    ....

}

“桥接”方法是编译器生成的一种隐藏方法,用于使Java和JVM之间的差异正常工作。


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


查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 71 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信