Вы можете использовать переменную непосредственно в своем примере, в основном потому, что sayName()
находится в том же классе.
Кроме этого, я вижу 3 причины наличия геттеров и сеттеров:
1.) Это принцип объектно-ориентированного программирования, позволяющий сохранять значения (состояние) закрытыми и предоставлять открытые методы для взаимодействия с другими классами.
2.) Классы с геттерами и сеттерами часто следуют шаблону проектирования Java-бинов. Этот шаблон позволяет использовать эти объекты в шаблонизаторах или языках выражения, таких как JSP или Spring.
3.) В некоторых случаях это предотвращает фактические ошибки. Пример:
public class DateHolder() {
public Date date;
public static void main(String... args) {
DateHolder holder = new DateHolder();
holder.date = new Date();
System.out.println("date in holder: "+holder.date);
Date outsideDateRef = holder.date;
outsideDateRef.setTime(1l);
//will be different, although we did not change anything in the holder object.
System.out.println("date in holder: "+holder.date);
}
}
перенос переменной даты с помощью метода get и метода set, которые работают только со значением, а не со ссылкой, предотвратит это:
public class DateHolder() {
private Date date;
public Date getDate() {
return (Date)this.date.clone();
}
public void setDate(Date date) {
this.date = (Date) date.clone();
}
public static void main(String... args) {
DateHolder holder = new DateHolder();
holder.setDate( new Date() );
System.out.println("date in holder: "+holder.getDate());
Date outsideDateRef = holder.getDate();
outsideDateRef.setTime(1l);
//Date in holder will not have changed
System.out.println("date in holder: "+holder.getDate());
}
}