为什么Java会限制隐藏方法的访问修饰符

Bax*_*Bax 5 java static method-hiding

隐藏静态字段时,字段对子类的访问级别没有限制,它甚至可以是非静态的,也可以是其他数据类型.

另一方面,当隐藏静态方法时,从超类隐藏静态方法的子类中的静态方法可以允许比隐藏方法更多但不能更少的访问.

AFAIK,静态方法链接无论如何都是在编译时完成的,那么为什么会有这样的限制呢?

PS问题只是出于好奇.

Rus*_*uka -2

因为在子类中,您覆盖非私有超类方法,但覆盖了影子字段。至于设置更广泛的访问级别 - 你总是可以写类似的东西

public void sublcassMethod() {
    supersecretSuperclassMethod();
}
Run Code Online (Sandbox Code Playgroud)

因此,在语言级别通过更广泛的访问来限制覆盖是没有意义的 - 这种限制很容易实现


归档时间:

查看次数:

157 次

最近记录:

10 年,4 月 前