【问题标题】:static final method in Java [duplicate]Java中的静态最终方法[重复]
【发布时间】:2019-04-14 21:12:53
【问题描述】:

Java 不会让类的静态方法被覆盖。因此,如果超类方法是静态的,则在子类中,同名方法也需要是具有相同签名的静态方法才能编译,尽管它不是方法覆盖。下面是一个例子:

但我的问题是,如果这不是方法覆盖,那为什么我不能将 Super Class 中的静态方法设为 final?

【问题讨论】:

  • 因为您已经将超类的 foo() 方法声明为“final”,这是“final”关键字应该做的。
  • 重复项与问题无关,因为 OP 已经知道静态方法不能被覆盖并且没有询问(他在问为什么超类静态方法中的 final 修饰符阻止定义具有相同签名的静态方法的子类,该签名不是覆盖)。我正在投票重新开放。

标签: java overriding


【解决方案1】:

如果您查看JLS 8.4.3.3 final Methods,您会发现final 方法修饰符可防止方法被覆盖或隐藏

可以将方法声明为 final 以防止子类覆盖或隐藏它。

尝试覆盖或隐藏最终方法是编译时错误。

static 方法不能被覆盖,但可以隐藏final 修饰符防止它被子类 static 方法隐藏。

【讨论】:

  • 感谢@Eran 正确地达到了我想要提出的观点,您的回答帮助我非常准确地理解了方法隐藏。
  • 嗨,我也想了解在这种情况下我们使用 static final 两者都不能被覆盖......我们在这里隐藏是什么意思?由于该功能是公开的,因此如何隐藏它
猜你喜欢
  • 1970-01-01
  • 2011-11-25
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 2013-06-19
  • 2011-01-03
相关资源
最近更新 更多