Геттеры и сеттеры (Getters/Setters)

Тренажер по Java для пользователей с начальным уровнем подготовки.

Тренажер по Java

Инкапсуляция — один из китов ООП, и в Java она реализуется через скрытие полей класса и предоставление доступа к ним через специальные методы.

Прямой доступ к полям (public) часто считается плохой практикой. Вместо этого поля делают private, а для чтения и записи создают:

  • Геттеры (Getters): методы для получения значения (например, getName()).
  • Сеттеры (Setters): методы для установки значения (например, setName(...)).

Сеттеры позволяют валидировать данные перед записью, защищая объект от некорректных состояний. В этом уроке вы потренируетесь писать правильные методы доступа и использовать ключевое слово this.

Список тем

1. Роли методов

id: 40483_encap_01_compare

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

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
Метод, который возвращает значение приватного поля класса
Метод, который изменяет значение приватного поля класса
Пример сигнатуры метода-геттера для поля типа String
Пример сигнатуры метода-сеттера для поля типа int
public void setField(int value)
Setter
public String getField()
Getter
Сообщения
Проверить
Показать подсказку

2. Поиск приватных полей

id: 40483_encap_02_click

Внимательно изучите приведенный код класса Person. Ваша задача — отметить все поля, которые объявлены с модификатором доступа private. Не отмечайте поля с другими модификаторами (public, protected, без модификатора) и другие элементы кода (такие как методы, конструкторы, ключевые слова).

Кликните по всем фрагментам, которые подходят под условие задания.
public class Person {
    {{private String name;~|~t1}}
    {{private int age;~|~t2}}
    {{private double salary;~|~t3}}
    {{public String address;~|~t4}}
    {{protected String phoneNumber;~|~t5}}
    String email;
    // Конструктор
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // Геттеры и сеттеры
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
Сообщения
Проверить
Показать подсказку

3. Ключевое слово return

id: 40483_encap_03_replace

В этом фрагменте кода на Java реализован класс Person с приватным полем name и геттером getName(). Однако в методе геттера пропущено ключевое слово, необходимое для возврата значения поля. Вставьте правильное ключевое слово в отмеченное место, чтобы метод getName() корректно возвращал значение поля name при вызове. Обратите внимание на синтаксис Java и тип возвращаемого значения.

Заполните пропуски
public class Person {
    private String name;

    public String getName() {
        input1S name;
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Типы данных в методах

id: 40483_encap_04_select

В данном задании представлен фрагмент класса Java с приватными полями разных типов. Вам нужно заполнить пропуски в методах геттеров и сеттеров, выбрав из выпадающего списка правильный тип возвращаемого значения для геттера и правильный тип аргумента для сеттера. Обратите внимание на соответствие типов данных полей класса и параметров методов. Задание направлено на закрепление понимания типизации в методах доступа при инкапсуляции.

Нужно правильно расставить в пропуски предложенные варианты
public class Person {
    private int age;
    private String name;
    private boolean active;

    public input1S getAge() {
        return age;
    }

    public void setAge(input2S age) {
        this.age = age;
    }

    public input3S getName() {
        return name;
    }

    public void setName(input4S name) {
        this.name = name;
    }

    public input5S isActive() {
        return active;
    }

    public void setActive(input6S active) {
        this.active = active;
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Конструкция Сеттера

id: 40483_encap_05_build

Из предложенных строк соберите корректное тело метода-сеттера (setter) для приватного поля `name` класса `Person`. Сеттер должен проверять, что переданное значение не является `null`, и только в этом случае присваивать его полю. Если значение `null`, следует присвоить полю строку "Unknown". Обратите внимание, что некоторые строки лишние и не должны входить в решение. Правильный порядок строк обязателен для корректной работы метода.

Перетяните в правильном порядке строки из одного блока в другой
public void setName(String name) {
    if (name != null) {
        this.name = name;
    } else {
        this.name = "Unknown";
    }
}
    this.name = name;
    return name;
    if (name == null) {
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Ошибка в this

id: 40483_encap_06_error

В представленном фрагменте кода Java, демонстрирующем использование геттера и сеттера, допущена ошибка, из-за которой программа работает некорректно. Найдите и исправьте строку с ошибкой, чтобы сеттер правильно присваивал значение приватному полю класса. Ошибка связана с использованием ключевого слова this.

Найдите ошибку и исправьте
public class Person {
    private String name;
 
    public void setName(String name) {
        name = name;
    }
 
    public String getName() {
        return name;
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

7. Результат работы

id: 40483_encap_07_give

Рассмотрите приведённый фрагмент кода на Java. В классе Person определено приватное поле age и сеттер setAge(int a), который содержит проверку: если переданное значение меньше 0, то поле не изменяется. В методе main создаётся объект Person и вызывается сеттер с аргументом -5. Определите, какое значение будет храниться в поле age объекта после выполнения кода. Введите одно число (дефолтное значение поля) или слово, если поле останется неизменным.

Что должно получиться?
public class Person {
    private int age;

    public void setAge(int a) {
        if (a >= 0) {
            age = a;
        }
    }

    public int getAge() {
        return age;
    }
}

public class Main {
    public static void main(String[] args) {
        Person p = new Person();
        p.setAge(-5);
        System.out.println(p.getAge());
    }
}
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру