最终和私人静态

时间:2010-06-16 08:34:35

标签: java static private final

我读到了这样做:

public final void foo() {}

等于:

private static void foo() {}

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

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

2 个答案:

答案 0 :(得分:20)

确实,你不能@Override这两种方法。您只能@Overridefinal 实例方法。

  • 如果是final,那么你无法@Override
  • 如果是static,那么它不是实例方法,而是

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

  • 他们具有不同的辅助级别
  • 实例方法需要调用实例,方法不
  • 方法无法引用static上下文中的实例方法/字段

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

参考

相关问题

答案 1 :(得分:2)

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

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