可能这是一个愚蠢的问题, 但为什么在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中我应该使用具有可视性的访问修饰符而不是超类中的,但我很难理解为什么我可以扩展它。