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

Раздел: ООП

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

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

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

Last updated: 3 мая 2025 г.

В Java поля класса никогда не следует определять как public, то есть они не должны быть доступны напрямую. Вместо этого поля должны быть 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        // используем сеттер setColor для записи значения
45        // в поле color объекта somecat.
46
47        // setColor публичный метод, поэтому
48        // можем к нему обратиться напрямую.
49        somecat.setColor("Black");
50        // Геттер тоже публичный метод,
51        // поэтому тоже используем его напямую 
52        // для извлечения значения приватного поля color
53        // из объекта somecat.
54        System.out.println(somecat.getColor());
55    }
56}

Вывод:


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

На первый взгляд может показаться, что проще объявить поле public и обращаться к нему напрямую через объект. Зачем усложнять?

Однако на деле, чтобы была возможность при необходимости накладывать ограничения на допустимые значения поля класса, нужно использовать сеттер. Сеттер — это обычный метод, а значит, мы можем добавить в него любую дополнительную логику, которая будет отфильтровывать недопустимые значения и не позволять им попасть в поле. Такой подход помогает контролировать данные, которые записываются в поля объекта, и предотвращает появление нежелательных значений.

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

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

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

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

Вывод:


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

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

15
мин.

Similar Articles Icon
Divider

Полиморфизм

15
мин.

Similar Articles Icon
Divider

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

16
мин.

Similar Articles Icon