【问题标题】:final and private static最终和私有静态
【发布时间】:2011-03-04 08:43:51
【问题描述】:

我读到这样做:

public final void foo() {}

等于:

private static void foo() {}

都表示该方法不可覆盖!

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

【问题讨论】:

  • 请注意(有点违反直觉)private 表示类私有,而不是对象私有。

标签: java static private final


【解决方案1】:

确实,你不能@Override 任何一种方法。你只能@Override 一个非final instance 方法。

  • 如果是final,那你就没法@Override
  • 如果是static,那么就不是instance方法开始

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

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

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

参考文献

相关问题

【讨论】:

  • 另外,public final 方法可以覆盖一些超类方法,而 private static 是静态的,不能。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 2012-09-29
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2019-11-06
    • 1970-01-01
    相关资源
    最近更新 更多