为什么我能够扩展子类中访问修饰符的可视性?

时间:2017-04-18 20:01:59

标签: java inheritance access-modifiers liskov-substitution-principle

可能这是一个愚蠢的问题, 但为什么在Java中我可以扩展子类中访问修饰符的可视性? 所以我要说我有以下代码:

打包a:

public class Parent
{
    private String name;

    void setName(String name)
    {
        this.name = name;
    }
}

在同一个包装中:

public class Child extends Parent
{
    @Override
    public void setName(String name)
    {
        super.setName(name);
    }
}

然后在包b中,我将能够致电

Child c = new Child;
c.setName("some-bad-name");

因此,我将能够通过该方法更改字段值,该方法最初应该仅从同一个包的类中调用,而不是通过其他包中的某些代码进行更改。

因此,在Java中,我们无法扩展,但只使用与超类相同的可见性 - 我将无法像这样更改“名称”字段。 我知道Liskov Substitution Princip并且它解释了为什么在子类I中我应该使用具有可视性的访问修饰符而不是超类中的,但我很难理解为什么我可以扩展它。

0 个答案:

没有答案