Окей. С самого первого знакомства с инкапсуляцией и её свойствами сокрытия данных, для меня остается непонятным один момент: поля класса, помеченные модификатором private
, недоступны другим классам - это ясно.
Допустим:
public class Solution {
public static void main(String[] args) {
}
public class Cat {
private String name;
public Cat(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) { // этот метод противоречит принципам инкапсуляции
this.name = name;
}
}
}
Когда мы вызываем метод setName("Васька")
, ведь он меняет значение поля? Если да, то это мне не очень понятно. Я имею в виду: какая разница, отметили ли мы поле модификатором доступа private
? Если мы получаем доступ к нему через сеттер и меняем его значение как хотим?
Пожалуй, заново расписывать велосипед не стану, ибо вопросов, аналогичных вашему, в интернете предостаточно - вот, например: Геттеры-сеттеры в Java, или ещё вот: Java. Зачем геттеры и сеттеры для полей public? (кроме проверок), а также хорошие ответы здесь: А существует ли инкапсуляция, если есть рефлексия?.
Если сказать кратко: для соблюдения парадигмы ООП, инкапсуляции; для удобства и красоты кода; для сокрытия реализации от пользователя; для того, чтобы в наследуемых классах, или реализующих ваш интерфейс, можно было переопределить получение значения нужного поля, ну и так далее.
И, да: по сути, вы не получаете доступа к полю, вы получаете доступ к методу, который возвращает значение того или иного параметра. Также, метод не всегда может возвращать/устанавливать именно само значение поля. Как верно подмечено в ответах на один из перечисленных выше вопросов, благодаря инкапсуляции, те пользователи, которые будут использовать ваш класс, будут знать, какие поля можно читать, какие перезаписывать, а какие трогать вообще не стоит. Да и вам самим будет удобнее, тем более если будет необходимость вернуться к этому коду через длительное время.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пытаюсь разделить строку по пайпу, почитал, как это все делается, но не могу понять, что не такНе работает
ЗдравствуйтеПриложение имеет TabPane, имеем кнопку которая в TabPabe добавляет ещё один Tab, но этот Tab вместе с контентом не создаётся в контроллере...
Пользуюсь средой разработки NetBeansСобираю с помощью Ant
Есть такой кусочек кодаПо bluetooth я получаю строку с двумя переменными, разделяю их по пайпу, потом каждую переменную по отдельности показываю...