首页 > 解决方案 > 为什么在java子类中可以更容易访问字段或方法的级别访问

问题描述

据我了解,替换原则不允许子类具有访问权限较弱的字段,因为否则它可能会违反信息隐藏,并且还因为子类应始终提供至少与其父类相同的行为。这对我来说很有意义。
但同时我不明白扩展字段或方法访问级别有什么意义?我在父类中有一个私有字段,而在子类中有一个公共字段。你能举个例子说明为什么这是有道理的吗?还是仅仅是因为设计选择?

标签: javaaccess-modifiers

解决方案


正如您提到的私人领域,这不是真的。您不能将私有字段从超类扩展到子类。如果您声明具有相同名称的字段,则为该子类定义一个新字段。
但是,您可以将包访问和受保护的访问更改为更像公共的东西,这不会产生任何问题,因为超类没有为其子类提供该功能,但子类可能会根据其状态更改其行为并希望为其他用户。
例如,当它受到保护时,您只能在该包和子类中访问它。但是,也许您在其中做了一些不利于公共实施的工作。(如果您公开某些内容,则必须支持它以供将来发布)但是在子类中您可能希望覆盖它并为其添加一些新功能并提供可供其他人使用的结果。
一个很好的例子(java总是提供最好的例子):
如果你看到,java在Object类中声明了这个:

class Object {
    protected native Object clone() throws CloneNotSupportedException;
}

所以没有人可以调用clone()它。这很好,因为也许我不想提供clone()我的课程。但是,如果我想要它,很容易覆盖它并将其公开给其他人,也可以调用super.clone()它以使用之前实现的功能,以创建我的班级的新副本。不是很棒吗?!


推荐阅读