繁体   English   中英

最终和私人静态

[英]final and private static

我读到了这样做:

public final void foo() {}

等于:

private static void foo() {}

两者都意味着该方法不可覆盖!

但是,如果一个方法是私有的,我自动无法访问,我没有看到等价...

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

  • 如果它是final ,那么你无法@Override
  • 如果它是static ,那么它不是一个开始的实例方法

他们“平等” 并不是真的,因为一个是private static ,另一个是public final

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

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

参考

相关问题

两者都不能被覆盖,但原因各不相同。 第一种是公共非静态方法,而secod是静态的。 所以第一个是不可覆盖的,因为它已被声明为final,而第二个是静态的,永远不能被覆盖。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM