Топ-100Свойства в ООП (getters, setters) - CodOrbits
LogoCodOrbits

Раздел: ООП

Здесь вы познакомитесь с объектно-ориентированным программированием в Java: классы, наследование, инкапсуляция и полиморфизм и многое другое.

Все разделы
Иконка ООП

Свойства в ООП (getters, setters)

Last updated: 3 мая 2025 г.

Поля любого класса не должны быть доступны напрямую, они всегда должны быть private, а доступ к ним должен обеспечиваться с помощью специальных методов – геттеров и сеттеров.

геттер – это public метод через который мы получаем значение private поля.

сеттер – это public метод через который мы задаем значение private полю.

То есть мы работаем с private полем не напрямую (напрямую это так – somecat.name = “Barsik”;), а через public методы класса, то есть методы, которые доступны не только в пределах класса.

Search Icon

Определяется один геттер и один сеттер на каждое private поле класса.

Поясним на примере

1class Cat {
2    // Пусть оба поля будут private
3    private String name;
4    private String color;
5
6    Cat(String catName, String catColor) {
7        name = catName;
8        color = catColor;
9        // К color можно обращаться только
10        // в пределах класса кошки и ниоткуда больше
11        // например, в конструкторе класса кота
12        System.out.println(color);
13    }
14
15    // Как видим, для поля name был создан
16    // геттер и сеттер (два публичных метода ниже).
17    public String getName() {
18        return name;
19    }
20
21    public void setName(String catName) {
22        name = catName;
23    }
24
25    // Для color тоже создаем геттер и сеттер.
26    public String getColor() {
27        return color;
28    }
29
30    public void setColor(String catColor) {
31        color = catColor;
32    }
33
34    void sayMeow() {
35        System.out.println("Meow");
36    }
37}
38
39class Props {
40    public static void main(String[] args) {
41        Cat somecat = new Cat("Kuzya", "White");
42        // Поскольку напрямую к полям мы обратиться
43        // не можем (вот так somecat.color = "White");
44        // используем сеттер для записи значения
45        // в поле color объекта somecat.
46
47        // setColor публичный метод, поэтому
48        // можем к нему обратиться напрямую.
49        somecat.setColor("Black");
50
51        // Используем геттер, который извлечет
52        // нам из объекта значение color.
53        System.out.println(somecat.getColor());
54    }
55}

Вывод:


Зачем же нужны геттеры, сеттеры?

Зачем же нам нужны все эти телодвижения? Может можно просто объявить поле public и работать с ним напрямую через объект?

Всё это нужно, чтобы мы всегда при надобности могли установить некоторые ограничения того какое значение может принимать конкретное поле класса. Мы можем добавить в сеттер некоторую дополнительную логику, которая будет отфильтровывать значения, которые не должно принимать поле.

Допустим, если у нас поле name будет public, то ему напрямую через объект можно задать значение, например “З” (вот так – somecat.name = “З”;).

Ну кто называет кошку одним символом?Никто. Поэтому в сеттере можно задать ограничение, чтобы имя кошки содержало минимум два символа.

Поясним на примере:

1class Cat{
2    private String name;
3    private String color;
4
5    //Создадим конструктор без параметров и тела.
6    //Это называется конструктор по умолчанию.
7    //Это нужно чтобы можно было создавать объект вот так:
8    //Cat somecat = new Cat();
9    Cat() {}
10
11    //И второй конструктор, который был раньше.
12    //Как видим можно создавать много конструкторов,
13    //Но об этом позже.
14    Cat (String catName, String catColor) {
15        name = catName;
16        color = catColor;
17        System.out.println(color);
18    }
19
20    public String getName(){
21        return name;
22    }
23
24    public void setName(String catName){
25        //Задаем ограничение.
26        //Если длина переданного в метод имени
27        //больше единицы.
28        if(catName.length()<1) {
29            //записываем переданное имя в поле name.
30            name = catName;
31        }
32        else { //В ином случае
33            //выведем сообщение чтобы ввели
34            //больше чем один символ
35            System.out.println("Cat name have to contain"
36                + "more than 1 character.");
37        }
38    }
39
40    public String getColor(){
41        return color;
42    }
43
44    public void setColor(String catColor){
45        color = catColor;
46    }
47
48    void sayMeow(){
49        System.out.println("Meow");
50    }
51}
52
53class Props2 {
54    public static void main(String[] args) {
55        Cat somecat = new Cat();
56        somecat.setName("P");//В name ничего не запишется
57        //и будет выведено сообщение
58        //"Cat name have to contain more than 1 character."
59
60        //и строчкой кода ниже будет выведено,
61        //что поле name объекта somecat пустое (null),
62        //так как у нас не получилось записать туда "P".
63        System.out.println(somecat.getName());
64    }
65}

Вывод:


Следующие уроки

Наследование в Java

15
мин.

Similar Articles Icon
Divider

Полиморфизм

15
мин.

Similar Articles Icon
Divider

Абстрактный класс

16
мин.

Similar Articles Icon