Геттеры и Сеттеры
Предлагаем прочитать Вам 2 статьи о том, что такое геттеры и сеттеры. Это одна из статей из "Самоучителя по Java" от Vertex Academy.
- Статью №1 Вы найдете ниже.
- Статью №2 Вы можете прочитать по ссылочке.
Что такое геттеры и сеттеры?
Следующее понятие из мира ООП, которое следует рассмотреть - это геттеры и сеттеры (getter - от англ. "get" - получать, и setter - от англ. "set" - устанавливать). Это общепринятый способ вводить данные ("set") или получать данные ("get"). Например, у меня есть класс Cat - кошка. Я задаю (используя setter) имя, пол, цвет глаз и окрас кошки (или кота):
А потом, если нужно узнать, какое у кошки имя - получаю с помощь getter - в данном случае getCatName :
Зачем они нужны?
Действительно - если я сам все задаю, зачем все эти геттеры и сеттеры?
Тут, нам стоит вспомнить про такой принцип ООП как инкапсуляция (если Вы не знаете, что это такое, вернитесь назад и прочитайте статью "Что такое ООП"). С помощью геттеров и сеттеров Вы защищаете содержимое программы - когда ей пользуется кто-то другой.
Представим, что создается программа, с помощью которой печатаются паспорта. Вам ведь не захочется, чтобы кто-то без доступа вносил изменения в эту программу?
Как это работает?
Итак, как уже стало понятно, геттеры и сеттеры выполняют важную миссию защиты данных Вашей программы. Давайте рассмотрим, как это происходит на практике, и представим, что у нас есть такой класс Cat:
1 2 3 4 5 6 |
class Cat{ String name; String color; } |
Вот, в нашем классе есть только имя и цвет кошки/кота. Как создать геттеры и сеттеры для переменных этого класса?
Тут понадобится две составляющие:
1. Задать полям, которые мы хотим защитить, свойство private.
1 2 3 4 5 6 |
class Cat{ private String name; private String color; } |
2. Написать метод геттер/ сеттер для каждого поля.
Для поля name:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Cat{ private String name; private String color; public String getName(){ return name; } public void setName(String a){ name=a; } } |
Как Вы могли заметить, метод getName (имя метода-геттера состоит из слова get + название переменной) - это метод, который возвращает переменную типа String (т.е. имя кошки), и при этом не требует никаких данных.
Метод setName (имя метода-сеттера тоже состоит из слова set + название переменной) ничего не возвращает (void) но при этом требует String - новое значение для переменной name.
Теперь, таким же образом, напишем геттер и сеттер для переменной color:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class Cat{ private String name; private String color; public String getName(){ return name; } public void setName(String a){ name = a; } public String getColor(){ return color; } public void setColor(String color){ this.color = color; } } |
Видите - геттеры и сеттеры создаются по одному и тому же шаблону. Кроме того, Вы могли обратить внимание на эти строчки:
1 2 3 |
public void setColor(String color){ this.color = color; } |
Посмотрите на слово this. Дело в том, что в данном методе есть две переменные с одинаковым названием - переменная String color, которую мы объявили ранее для всего класса, и переменная внутри метода:
Это означает, что программа не знает - когда Вы пишете, например, "color =", который из них Вы имеете ввиду? Поэтому, для обозначения переменной, объявленной для всего класса, используется слово "this":
Поздравляем - теперь Вы знаете, как создавать геттеры и сеттеры!
О чем нужно помнить?
Пожалуйста, всегда обращайте внимание на следующее:
1. Наименование полей (переменных, содержащихся в классе) всегда пишется с маленькой буквы (например, int number, String name, и т.д.).
2. Как уже говорилось, наименование геттеров и сеттеров - в формате "get" + имя переменной с большой буквы (например, getColor, getName).
3. Метод геттер не имеет параметров (т.е. в скобках ничего не пишется) и возвращает значение одной переменной (одного поля).
4. Метод сеттер всегда имеет модификатор void и только один параметр, для изменения значения одного поля.
Cтатья написана Vertex Academy. Также мы проводим курсы Java с нуля. Детальнее на сайте.