Наверное глупый вопрос, но зачем в Java расширять видимость модификаторов доступа в подклассах? Итак, скажем, у меня есть следующий код:
пакет а:
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);
}
}
И тогда в пакете б я смогу позвонить
Child c = new Child;
c.setName("some-bad-name");
Так я смогу изменить значение поля через метод, который изначально предполагается вызывать только из классов того же пакета и не изменять через какой-то код в других пакетах.
Так что в случае, если в Java мы сможем не расширять, а использовать только ту же видимость, что и в суперклассе, я не смогу изменить поле «имя» таким образом. Я знаю о принципе подстановки Лискова, и он объясняет, почему в подклассе я должен использовать модификатор доступа с видимостью не меньше, чем в суперклассе, но я изо всех сил пытаюсь понять, почему я могу его расширить.
foo()
, но подкласс добавляет его. Потому что ты можешь; и поскольку он не менее заметен, чем метод в родительском классе, подкласс можно заменить Лисков. - person Andy Turner   schedule 18.04.2017