最终和私有静态

发布于 2024-09-06 00:35:02 字数 201 浏览 17 评论 0原文

我读到,doing:

public final void foo() {}

等于:

private static void foo() {}

两者都意味着该方法不可重写!

但我看不到如果一个方法是私有的,它就自动不是等价的 可访问...

I read that doing:

public final void foo() {}

is equals to:

private static void foo() {}

both meaning that the method is not overridable!

But I don't see the equivalence if a method is private it's automatically not
accessible...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

盗琴音 2024-09-13 00:35:02

确实,您不能使用任何一种方法@Override。您只能使用@Overridefinal实例方法。

  • 如果它是final,那么您就无法@Override它。
  • 如果它是static,那么它就不是实例方法开始

它们真的“相等”,因为一个是private static,另一个是public final

  • 它们具有不同的可访问性级别
  • instance 方法需要调用实例,class 方法则不需要
  • class 方法不能引用 < static 上下文中的实例 方法/字段

您不能@Override static 方法,但可以使用另一个静态方法隐藏它。当然,static 方法不允许动态分派(这是由 @Override 完成的)。

参考文献

相关问题

It's true that you can not @Override either method. You can only @Override a non-final instance method.

  • If it's final, then there's no way you can @Override it
  • If it's static, then it's not an instance method to begin with

It's NOT true that they're "equal", because one is private static, and the other is public final.

  • They have different accessibility level
  • The instance method requires an instance to invoked upon, the class method doesn't
  • The class method can not refer to instance methods/fields from the static context

You can not @Override a static method, but you can hide it with another static method. A static method, of course, does not permit dynamic dispatch (which is what is accomplished by an @Override).

References

Related questions

与之呼应 2024-09-13 00:35:02

两者都不能被覆盖,但原因却截然不同。第一个是公共非静态方法,而第二个是静态方法。因此,第一个不可重写只是因为它已被声明为最终的,而第二个是静态的,永远不能被重写。

请注意,从第一个开始,您可以访问类的非静态成员,而从第二个开始,您就不能访问该类的非静态成员。因此它们的使用方式非常不同,因此并不“平等”。

Neither can be overridden, but for very different reasons. The first is a public nonstatic method, while the secod is static. So the first is not overridable only because it has been declared final, while the second, being static, can never be overridden.

Note that from the first you can access nonstatic members of the class, while from second you can't. So they are used in very different ways, thus are not "equal".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文