Инкапсуляция — один из китов ООП, и в Java она реализуется через скрытие полей класса и предоставление доступа к ним через специальные методы.
Прямой доступ к полям (public) часто считается плохой практикой. Вместо этого поля делают private, а для чтения и записи создают:
- Геттеры (Getters): методы для получения значения (например,
getName()). - Сеттеры (Setters): методы для установки значения (например,
setName(...)).
Сеттеры позволяют валидировать данные перед записью, защищая объект от некорректных состояний. В этом уроке вы потренируетесь писать правильные методы доступа и использовать ключевое слово this.
- Модуль 1: Первая программа и структура
- Модуль 2: Переменные и типы данных
- Объявление и инициализация переменных.
- Примитивы: целые числа (int, long, byte, short).
- Примитивы: дробные числа (double, float).
- Примитивы: логический тип (boolean).
- Примитивы: символьный тип (char).
- String — основы работы со строками.
- Приведение типов (Casting): расширение и сужение.
- Область видимости переменных (Scope).
- Модуль 3: Операторы
- Модуль 4: Управляющие конструкции
- Модуль 5: Массивы и Строки (Advanced)
- Создание и заполнение массива.
- Доступ к элементам по индексу.
- Свойство length и перебор массива.
- Цикл for-each для массивов.
- Многомерные массивы.
- Методы String: length, charAt, isEmpty.
- Манипуляции: substring, concat, replace.
- Сравнение строк: equals vs ==.
- Разделение строк (split) и trim.
- StringBuilder (изменяемые строки).
- Модуль 6: Методы
- Модуль 7: Классы и Объекты (ООП Часть 1)
- Модуль 8: Капсуляция и Модификаторы
- Модуль 9: Наследование и Полиморфизм (ООП Часть 2)
- Модуль 10: Обработка исключений
- Модуль 11: Коллекции и Дженерики
- Модуль 12: Функциональный стиль (Java 8+)
- Модуль 13: Полезные стандарты
1. Роли методов
В этом задании по Java вам необходимо сопоставить описания методов с их названиями или примерами сигнатур, связанными с концепцией геттеров и сеттеров. В левой колонке приведены описания ролей методов или их характеристик, а в правой — соответствующие термины или примеры кода. Сопоставьте каждый элемент левой колонки с подходящим элементом правой, чтобы продемонстрировать понимание инкапсуляции и модификаторов доступа.
2. Поиск приватных полей
Внимательно изучите приведенный код класса 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
В этом фрагменте кода на Java реализован класс Person с приватным полем name и геттером getName(). Однако в методе геттера пропущено ключевое слово, необходимое для возврата значения поля. Вставьте правильное ключевое слово в отмеченное место, чтобы метод getName() корректно возвращал значение поля name при вызове. Обратите внимание на синтаксис Java и тип возвращаемого значения.
public class Person {
private String name;
public String getName() {
input1S name;
}
}4. Типы данных в методах
В данном задании представлен фрагмент класса 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;
}
}5. Конструкция Сеттера
Из предложенных строк соберите корректное тело метода-сеттера (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) {6. Ошибка в this
В представленном фрагменте кода Java, демонстрирующем использование геттера и сеттера, допущена ошибка, из-за которой программа работает некорректно. Найдите и исправьте строку с ошибкой, чтобы сеттер правильно присваивал значение приватному полю класса. Ошибка связана с использованием ключевого слова this.
public class Person { private String name; public void setName(String name) { name = name; } public String getName() { return name; }}7. Результат работы
Рассмотрите приведённый фрагмент кода на 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());
}
}