Инкапсуляция.Геттеры и Сеттеры простыми словами.Зачем они нужны?
Об этом так много тем и все как то пытаються писать терминами или писать десертации.Если простыми словами в крации вся суть какая с примером?
1.Подскажите, нужна ли инкапсуляция , сокрытие полей модификаторами private , если сеттером можно изменить данные?
2.Я правильно понимаю, мы берем исходные данные в полях и через методы геттеров и сеттеров работаем с копией этих данных? и меняем свой класс как хотим, при этом можем вернуться к не тронутым данным если что то сделали с ошибками?
Ответы (1 шт):
Автор решения: rotabor
→ Ссылка
- Сеттером можно изменить данные, а можно и не изменить. Это будет зависеть от самого сеттера, так как сеттер — это целая программа, которая как раз и предназначена для определения возможности изменения данных или не выполнения этих изменений, а также для выполнения сопутствующих действий. Например, рисование прямоугольника. Изменение размеров не только запишет новые значения в соответствующие поля, но и вызовет отрисовку этого прямоугольника с новыми размерами, что выполняется сеттером.
- Нет. Работаем с копией поля всегда, а вот что хранится в этом поле уже зависит от типа его значения, который может быть значащим или ссылочным. Если поле значащего типа, то мы получим через геттер копию данных, если поле ссылочного типа - то получим ссылку (копию ссылки) на данные, которые можно будет менять (если нет других ограничений), а вот саму ссылку в поле изменить нельзя. Например, поле является массивом. Через геттер получаем копию значения поля - ссылку на массив и можем менять элементы, но само поле всегда будет указывать на этот массив, и изменить это без прямого доступа к полю нельзя.