Как работают геттеры и сеттеры java
Геттеры и сеттеры защищают значение переменной от неожиданных изменений. Когда переменная скрыта модификатором private и доступна только через геттер и сеттер, она инкапсулирована(скрыта от прямого доступа). Поэтому реализация геттеров и сеттеров является одним из способов обеспечения инкапсуляции в коде программы.
Например создадим класс User:
public class User private int id; private String name; // возможно тут будет конструктор. // получаем значение поля id public int getId() return id; > // записываем значение в поле id public void setId(int id) this.id = id; > // получаем значение поля name public String getName() return name; > // записываем значение в поле name public void setName(String name) this.name = name; > >
Создадим экземпляр класса User и применим к нему геттеры и сетторы:
User user = new User(); //Зададим значение полей через сеттеры user.setId(1); user.setName("Mark"); //Получим значения полей через геттеры String name = user.getName(); int id = user.getId();
Геттеры и сеттеры Java. Где применяются, какие у них различия?
![]()
Геттеры и сеттеры в Java применяются довольно часто. Основная их цель — это обеспечить защиту данным в коде от неправильного внешнего использования.
Они применяются не только в языке Java, но также в С, JavaScript и других языках программирования. То есть геттеры и сеттеры — это довольно распространенное явление в программировании. Но сегодня мы разберем, как используются геттеры и сеттеры именно в языке Java.
Геттеры и сеттеры в Java
Простая возможная ситуация из жизни. Допустим , вы работаете в команде над каким-то совместным проектом. Вы разработали на Ява классовый объект Dog, определяющий собачек , и пошли домой. Возможно , ушли на выходные или , вероятно , в отпуск.
Класс « нашей собаки » будет примерно таким:
public_class Dog
public_Strng names;
public_nt ages;
public_int weghts;
publc Dog(Strng names, int ages, int weghts)
this.names = names;
this.ages = ages;
this.weights = weights;
>
public Dog()
>
public void sayGav()
System.out.println(«Гав-гав!»);
>
>
Вы спокойно пошли на заслуженный отдых , в мыслях никого не подозревая. А тем временем один из ваших коллег воспользовался вашим « творением » Dog, когда создавал, засыпая или не думая, класс Mode.
Его ко д инг представлен примерно в таком виде:
public_class Mode
publc_statcs_void mode(Strng[] ards)
Dog dog = new Dog();
dog.names = «»;
dog.ages = -999;
dog.weights = 1;
>
>
Абсолютно не имеет значения , зачем так сделал ваш коллега. Возможно , устал, а , может , лишняя банка энергетика дает о себе знать. Имеет значение другое: созданный вами класс Dog ничем не защищен и дает возможность ему присваивать немыслимые значения. Как в коде «вашего коллеги», где собаке присвоен возраст -999 лет.
Почему так произошло? Потому что поля «имени», «возраста» и «веса» собаки находятся в открытой доступности. А это значит, что есть возможность их задействовать в какой-то момент в рамках вашего программирования. Это делается легко: создается объект Dog , и его можно затронуть при необходимости, применяя оператор «.».
Пример:
Dog dog = new Dog();
dog.names = » «;
Геттеры и сеттеры Java: практическое применение
- Геттеры — это методы , при помощи которых мы можем получить информацию из полей.
- Сеттеры — это методы, которые могут установить нужную информацию в нужно е место.
Геттер ы и сеттеры Java простыми словами
Если провести аналогию и попытаться объяснить , что такое геттеры и сеттеры Java, то получится следующая история. Вообразите на секунду, что вы покупаете новый смартфон в коробке. А когда ее открываете, то видите там куч у разноцветных проводов, корпус, какие-то детали и т. д . , и все в разобранном виде. Чтобы позвонить, вам нужно это все собрать воедино. Получится? Скорее всего , нет, по крайней мере у большинства не получится , и они просто сломают телефон.
Поэтому вместо такой коробки запчастей мы получаем новенький смартфон, который нужно только зарядить, ввести нужный номер и нажать зелененькую кнопочку на экране, чтобы позвонить. Как там подключены провода, процессоры и другие части — нас вообще не волнует. В этом случае производитель смартфона применил «ограничения» к устройству, чтобы мы не смогли его повредить, но при этом с нужной отверткой мы можем добраться и до микросхем внутри.
Кстати, весь код в статье приведен для примера и ознакомления, что такое геттеры и сеттеры Java , и не претендует на свою истинность.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Зачем нужны getter and setter методы? [дубликат]
Давно уже пишу на java и я привык свойства класса делать приватном и писать для них гетер и сетер методы но я понял что не знаю зачем это нужно? Ведь если у тебя есть метод сетер и гетер к свойству не легче сделать его публичном и использовать?
Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 21 ноя 2018 в 2:36
Fariz Mamedow Fariz Mamedow
1,447 2 2 золотых знака 9 9 серебряных знаков 21 21 бронзовый знак
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Если у вас действительно никакой логики в геттерах сеттерах нет (и не предвидится), а только «пустышки», то вы только захламляете код лишними методами. Вспомните YAGNI — то что вы планируете может вам никогда не понадобится, но вы уже платите цену за возросшую сложность кода.
То что что-то можно использовать, не значит что это будет использовано. А то можно сразу и историю к каждому полю прицепить, и стэк, и логгирование .. но обычно не нужно.
Если же в геттерах-сеттерах чаще есть логика (примеры такой логики приведены в других ответах), чем ее нет, то да, код будет конситентнее (проще), если писать их везде по единому шаблону.
Отслеживать
ответ дан 21 ноя 2018 в 5:10
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
Методы get() и set() нужны не только для того, чтобы получить доступ к данным, но и чтобы не допустить некорректной работы с ними.
private int n = 1; int[] array = new int[5]; public void setN(int n) < if (n >= 0 && n
В данном случае, если мы захотим изменить n вызвав метод setN(), то при вызове метода method(), не будет ошибки из-за выхода за пределы массива.
Геттеры и Сеттеры

Следующее понятие из мира ООП, которое следует рассмотреть — это геттеры и сеттеры (getter — от англ. «get» — получать, и setter — от англ. «set» — устанавливать). Это общепринятый способ вводить данные («set») или получать данные («get»). Например, у меня есть класс Cat — кошка. Я задаю (используя setter) имя, пол, цвет глаз и окрас кошки (или кота):

А потом, если нужно узнать, какое у кошки имя — получаю с помощь getter — в данном случае get CatName :

Зачем они нужны?
Действительно — если я сам все задаю, зачем все эти геттеры и сеттеры?
Тут, нам стоит вспомнить про такой принцип ООП как инкапсуляция (если Вы не знаете, что это такое, вернитесь назад и прочитайте статью «Что такое ООП»). С помощью геттеров и сеттеров Вы защищаете содержимое программы — когда ей пользуется кто-то другой.
Представим, что создается программа, с помощью которой печатаются паспорта. Вам ведь не захочется, чтобы кто-то без доступа вносил изменения в эту программу?
Как это работает?
Итак, как уже стало понятно, геттеры и сеттеры выполняют важную миссию защиты данных Вашей программы. Давайте рассмотрим, как это происходит на практике, и представим, что у нас есть такой класс Cat: