我读到了这样做:
public final void foo() {}
等于:
private static void foo() {}
两者都意味着该方法不可覆盖!
但是如果一个方法是私有的,我自动不会看到等价 访问...
答案 0 :(得分:20)
确实,你不能@Override
这两种方法。您只能@Override
非final
实例方法。
final
,那么你无法@Override
static
,那么它不是实例方法,而是 NOT 是真的,他们“相等”,因为一个是private static
,另一个是public final
。
static
上下文中的实例方法/字段您不能@Override
static
方法,但可以使用其他static
方法隐藏。当然,static
方法不允许动态分派(这是由@Override
完成的。)
答案 1 :(得分:2)
两者都不能被覆盖,但原因各不相同。第一种是公共非静态方法,而secod是静态的。所以第一个是不可覆盖的,因为它已被声明为final,而第二个是静态的,永远不能被覆盖。
请注意,从第一个开始,您可以访问该类的非静态成员,而从第二个开始,您不能。因此它们以非常不同的方式使用,因此不是“平等”。