В чем проблема с не объявлением i
private?
Из Effective Java 3rd edition:
Если класс доступен вне пакета, предоставьте методы доступа для сохранения гибкости изменения внутреннего представления класса.Если открытый класс предоставляет свои поля данных, вся надежда на изменение его представления теряется, потому что клиентский код может распространяться повсюду.
Однако , если класс является частным для пакета или частным вложеннымкласс, нет ничего плохого в том, чтобы выставлять его поля данных.
Я думаю, это довольно ясно дает понять, когда нужно выставить i
, а когда нет.
Вкл.с другой стороны, LSP не нарушается, потому что вы всегда можете написать
A a = new B();
Обычно нецелесообразно оценивать, какой из принципов SOLID нарушается с классами, значение которых неясно (например, классы A
и B
в вашем случае)
Но если вы знаете (контекстуальное) значение каждого класса, тогда мы можем сделать некоторые комментарии.(Например, Employee
is-a
Person
, а также Student
is-a
Person
- поэтому здесь должен работать LSP - вы должны иметь возможность назначить объект Employee
для ссылки Person
ито же самое относится и к Student
объекту)