【发布时间】:2011-03-04 08:43:51
【问题描述】:
我读到这样做:
public final void foo() {}
等于:
private static void foo() {}
都表示该方法不可覆盖!
但是如果方法是私有的,我看不到等价性,它自动不是 可访问...
【问题讨论】:
-
请注意(有点违反直觉)private 表示类私有,而不是对象私有。
我读到这样做:
public final void foo() {}
等于:
private static void foo() {}
都表示该方法不可覆盖!
但是如果方法是私有的,我看不到等价性,它自动不是 可访问...
【问题讨论】:
确实,你不能@Override 任何一种方法。你只能@Override 一个非final instance 方法。
final,那你就没法@Override了static,那么就不是instance方法开始不他们“相等”是真的,因为一个是private static,另一个是public final。
static 上下文中的instance 方法/字段你不能@Override 一个static 方法,但你可以隐藏另一个static 方法。 static 方法当然不允许动态调度(这是由 @Override 完成的)。
【讨论】:
两者都不能被覆盖,但出于不同的原因。第一个是公共的非静态方法,而第二个是静态的。所以第一个不能仅仅因为它被声明为 final 而被覆盖,而第二个是静态的,永远不能被覆盖。
请注意,从一开始您就可以访问类的非静态成员,而从一开始就不能。所以它们的使用方式非常不同,因此并不“相等”。
【讨论】: