Зміст курсу
Java Extended
Java Extended
Геттер і Сеттер
Найкращий спосіб обійти модифікатор доступу private
Усі програмісти Java використовують конструкції, які називаються гетерами та сетерами.
Гетери та сетери — це методи, що дотримуються певного шаблону. Вони використовуються для обходу модифікатора доступу private
та ефективної роботи з полями з іншого класу.
Що роблять гетери та сетери?
Простіше кажучи, сетер дозволяє призначити значення певному полю, захищеному модифікатором доступу private, а гетер дозволяє отримати значення з поля, захищеного модифікатором доступу private.
Синтаксис гетера та сетера:
Main.java
// getter public fieldType getFieldName() { return field; } // setter public void setFieldName(fieldType field) { this.field = field; }
Як видно з коду вище, ми використовуємо конвенцію іменування методів getFieldName()
та setFieldName()
. Тобто, якщо у нас є поле private String name
і ми створюємо гетер та сетер з іменами getName()
та setName()
відповідно. Також варто зазначити, що гетер повертає значення того ж типу, що й поле name
, а сетер приймає параметр того ж типу, що й поле name
.
Це дозволяє нам отримувати доступ до полів, які захищені модифікатором доступу private
.
Розглянемо приклад доступу до приватного поля з класу Person
у класі main
:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.setName("Bob"); System.out.println(bob.getName()); } } class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
Як ви бачите, ми використовуємо setter для встановлення значення поля name
, а потім використовуємо getter для відображення значення поля name
на екрані. Зверніть увагу на синтаксис getter та setter, а також на те, що поле name
у класі Person
захищене модифікатором доступу private
.
Конструктор проти Getter/Setter
Що краще використовувати: ініціалізацію через конструктор + перевизначення методу toString()
, чи використання getter та setter?
Безумовно, краще використовувати getter та setter для доступу до полів, захищених модифікатором доступу private
. Це забезпечує більшу гнучкість у коді та покращує його читабельність. Коли ви бачите використання методу getName()
у коді, ви одразу розумієте, що цей метод отримує поле з назвою name
. Те саме стосується і використання методу setName()
— ви одразу розумієте, що присвоюєте певне значення полю для об'єкта класу, у якому він використовується. Якщо інші люди читають ваш код, вони будуть раді бачити getter-и та setter-и.
Також варто зазначити, що кожне поле потребує власного getter та setter. Якщо клас має два поля, захищених модифікатором доступу private
, у класі має бути по одному getter для кожного поля, тобто два getter і два setter.
Розглянемо приклад, де ми додаємо поле age
до класу Person
:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.setName("Bob"); bob.setAge(27); System.out.println("Person's name: " + bob.getName() + ", Person's age: " + bob.getAge()); } } class Person { private String name; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Як бачите, ми створили по одному геттеру та сеттеру для кожного поля класу Person
. У методі main
ми ініціалізували поля за допомогою сеттера та вивели їх значення на екран за допомогою геттера. Використання цих методів є дуже зручним, і ви часто будете використовувати їх у майбутньому.
1. Яке призначення використання геттерів і сетерів?
2. Який синтаксис методу-геттера в Java?
3. Який синтаксис методу setter у Java?
Дякуємо за ваш відгук!