Геттеры и Сеттеры в Java
Предлагаем прочитать Вам 2 статьи о том, что такое геттеры и сеттеры. Это статьи из "Самоучителя по Java" от Vertex Academy.
- Статью №1 Вы найдете ниже.
- Статью №2 Вы можете прочитать по ссылочке.
Начнем с того, что напишем свой класс! К примеру возьмем класс "Машина" - "Car".
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public class Car { private String model; private String color; Car (){ this("Model Default"); } Car (String model){ this("Color Default", model); } Car (String color, String model){ this.color = color; this.model = model; this.info(); } public void run(){ System.out.println("Car - Run..."); } public void stop(){ System.out.println("Car - Stop..."); } public void info(){ System.out.println("Car Model: " + model + ", Car Color: " + color); } } |
При вызове разных Конструкторов они будут заполняться значениями по умолчанию или теми, которые Вы укажите!
1 2 3 4 5 6 7 |
public class Test { public static void main(String[] args) { Car car = new Car(); Car car1 = new Car("Ford"); Car car2 = new Car("RED", "Ford"); } } |
Вывод будет следующим:
Так же есть методы, при вызове которых Машина едет или останавливается:
- run() - вывод на консоль "Car - Run..."
- stop() - вывод на консоль "Car - Stop..."
Еще есть метод, который отдает всю информацию о Машине.
- info(); - вывод в консоль информации о Машине.
Вы наверняка заметили, что поля: color и model - приватные (private), а значит произвести с ними какое-то действие вне этого Класса - невозможно!
Но нужно же в любой момент иметь возможность узнать какого цвета или модели Машина и не вызывать при этом метод info() - который отдает всю информацию о Машине. В таком случае пользуемся Геттерами!
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
public class Car { private String model; private String color; Car() { this("Model Default"); } Car(String model) { this("Color Default", model); } Car(String color, String model) { this.color = color; this.model = model; this.info(); } public String getColor() { return color; } public String getModel() { return model; } public void run() { System.out.println("Car - Run..."); } public void stop() { System.out.println("Car - Stop..."); } public void info() { System.out.println("Car Model: " + getModel() + ", Car Color: " + getColor()); } } |
Теперь добавили два метода:
- getColor() - который возвращает цвет Машины.
- getModel() - который возвращает модель Машины.
Это гораздо удобней, чем просто переменные, потому что Вы получаете не просто цвет или модель. Вы получаете метод, а значит можно в методе до того как вернуть цвет или модель, произвести какие-то действия, крайне важные для жизни данного объекта. И таким образом Вы не нарушаете правила Инкапсуляции!
Но что, если Вы хотите перекрасить Машину? Тогда на помощь приходят Сеттеры - Setters:
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
public class Car { private String model; private String color; Car() { this("Model Default"); } Car(String model) { this("Color Default", model); } Car(String color, String model) { this.color = color; this.model = model; this.info(); } public String getColor() { return color; } public String getModel() { return model; } public void setColor(String color) { this.color = color; } public void setModel(String model) { System.out.println("Вы не можете поменять модель Машины."); } public void run() { System.out.println("Car - Run..."); } public void stop() { System.out.println("Car - Stop..."); } public void info() { System.out.println("Car Model: " + getModel() + ", Car Color: " + getColor()); } } |
Теперь добавили два метода:
- setColor() - который задает (переопределяет) на новый цвет - в Машины.
- setModel() - который выводит на консоль сообщение, что нельзя в Машине поменять модель.
Такая обработка полей нужна для того, чтобы предвидеть и устранить нежелаемые действия над Объектом. Заранее предотвратить!
В таком случае Объектом можно пользоваться весьма корректно и без "происшествий".
Осталось только посмотреть это все в действии. Поехали!
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
public class Car { private String model; private String color; Car() { this("Model Default"); } Car(String model) { this("Color Default", model); } Car(String color, String model) { this.color = color; this.model = model; this.info(); } public String getColor() { return color; } public String getModel() { return model; } public void setColor(String color) { this.color = color; } public void setModel(String model) { System.out.println("Вы не можете поменять модель Машины." + " Вы хотели поменять модель на " + model); } public void run() { System.out.println("Car - Run..."); } public void stop() { System.out.println("Car - Stop..."); } public void info() { System.out.println("Car Model: " + getModel() + ", Car Color: " + getColor()); } } |
А теперь создадим Объекты и произведем над ними действия:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
public class Test { public static void main(String[] args) { System.out.println("Car - Constructor:"); Car car = new Car(); System.out.println("Car1 - Constructor:"); Car car1 = new Car("Ford"); System.out.println("Car2 - Constructor:"); Car car2 = new Car("RED", "Ford"); System.out.println("Test - Car"); System.out.println("Car - Model: " + car.getModel()); System.out.println("Car - Color: " + car.getColor()); car.setColor("Yellow"); car.setModel("Lada"); car.info(); System.out.println("Test - Car1"); System.out.println("Car1 - Model: " + car1.getModel()); System.out.println("Car1 - Color: " + car1.getColor()); car1.setColor("Yellow"); car1.setModel("Lada"); car1.info(); System.out.println("Test - Car2"); System.out.println("Car2 - Model: " + car2.getModel()); System.out.println("Car2 - Color: " + car2.getColor()); car2.setColor("Yellow"); car2.setModel("Lada"); car2.info(); } } |
Вывод будет следующим:
Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Обучаем с нуля. Детальную информацию Вы можете найти у нас на сайте.