← Назад к вопросам

В чем разница между методом get и методом set?

1.0 Junior🔥 111 комментариев
#ООП#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между методом get и методом set

Методы get и set — это основополагающие концепции в Java, которые используются для доступа и изменения приватных полей объекта. Это часть принципа инкапсуляции, одного из столпов объектно-ориентированного программирования. Понимание их различий критично для написания качественного кода.

Метод GET (Getter)

Метод GET используется для получения (чтения) значения приватного поля объекта:

public class Person {
    private String name;
    private int age;
    
    // Getter для поля name
    public String getName() {
        return name;
    }
    
    // Getter для поля age
    public int getAge() {
        return age;
    }
}

// Использование
Person person = new Person();
String name = person.getName(); // Получаем значение
int age = person.getAge();        // Получаем значение

Характеристики getter:

  • Возвращает значение — всегда возвращает значение поля
  • Не принимает параметры — иногда может содержать условную логику
  • Только чтение — не изменяет состояние объекта
  • Именование: get + имя поля с заглавной буквой (для boolean используется is вместо get)
  • Использование: когда нужно прочитать значение поля
// Специальный случай для boolean
public class User {
    private boolean active;
    
    // Для boolean используется is вместо get
    public boolean isActive() {
        return active;
    }
}

Метод SET (Setter)

Метод SET используется для установления (изменения) значения приватного поля объекта:

public class Person {
    private String name;
    private int age;
    
    // Setter для поля name
    public void setName(String name) {
        this.name = name;
    }
    
    // Setter для поля age
    public void setAge(int age) {
        this.age = age;
    }
}

// Использование
Person person = new Person();
person.setName("Иван");  // Устанавливаем значение
person.setAge(30);        // Устанавливаем значение

Характеристики setter:

  • Устанавливает значение — изменяет значение приватного поля
  • Принимает один параметр — новое значение для поля
  • Возвращает void — ничего не возвращает (иногда используется для fluent API)
  • Может содержать валидацию — часто проверяет корректность значения
  • Использование: когда нужно изменить значение поля

Сравнительная таблица

АспектGETSET
ФункцияПолучить значениеУстановить значение
Возвращаемый типТип поляvoid (или сам объект для fluent API)
ПараметрыНетОдин параметр
Изменяет состояниеНетДа
ВалидацияОпциональнаЧасто используется
Побочные эффектыОбычно нетМожет быть

Практические примеры

Пример 1: Простой getter и setter

public class BankAccount {
    private double balance;
    
    public double getBalance() {
        return balance;
    }
    
    public void setBalance(double balance) {
        this.balance = balance;
    }
}

Пример 2: Getter с логикой

public class Student {
    private List<Integer> grades;
    
    // Getter с вычислением
    public double getAverageGrade() {
        return grades.stream()
            .mapToInt(Integer::intValue)
            .average()
            .orElse(0.0);
    }
}

Пример 3: Setter с валидацией

public class Product {
    private double price;
    
    public void setPrice(double price) {
        if (price < 0) {
            throw new IllegalArgumentException("Цена не может быть отрицательной");
        }
        this.price = price;
    }
    
    public double getPrice() {
        return price;
    }
}

Пример 4: Fluent API (chainable setters)

public class RequestBuilder {
    private String url;
    private int timeout;
    
    public RequestBuilder setUrl(String url) {
        this.url = url;
        return this; // Возвращаем this для цепочки вызовов
    }
    
    public RequestBuilder setTimeout(int timeout) {
        this.timeout = timeout;
        return this;
    }
    
    // Использование
    // RequestBuilder builder = new RequestBuilder()
    //     .setUrl("https://api.example.com")
    //     .setTimeout(5000);
}

Зачем нужны getter и setter?

  1. Инкапсуляция — скрывают внутреннее представление данных
  2. Валидация — можно проверить значение перед сохранением
  3. Логирование — можно добавить логирование доступа к полям
  4. Ленивая инициализация — инициализировать значение только при первом обращении
  5. Контроль доступа — разные права доступа для чтения и записи
  6. Совместимость — если нужно изменить внутреннюю структуру, interface остается прежним

Современный Java (Records)

В Java 16+ появились Records, которые автоматически создают getter методы:

public record Person(String name, int age) {
    // Автоматически создаются getters: name() и age()
}

// Использование
Person person = new Person("Иван", 30);
String name = person.name();  // getter
int age = person.age();        // getter

Это упрощает код, когда вам нужна простая передача данных без сложной валидации или логики.

В чем разница между методом get и методом set? | PrepBro