Вот пример кода того, что я имею ввиду:
class Car
{
private String maker ;
private String color ;
private String bodyType ;
public Car()
{
maker = "Porsche" ;
color = "Silver" ;
bodyType = "Coupe" ;
}
private String accelerate()
{
String motion = "Accelerating..." ;
return motion ;
}
public void setCar(String brand, String paint, String style)
{
maker = brand ;
color = paint ;
bodyType = style ;
}
public void getCar()
{
System.out.println(maker + " color " + color);
System.out.println(maker + " frame type " + bodyType );
System.out.println(maker + " " + accelerate() + "\n" );
}
}
Зачем объявлять приватные переменные, а затем в методе setCar приравнивать их к публичным? Они же становятся доступными, т. е. теряется тсмысл приватности..
Зачем их вообще было тогда объявлять? Пользовались бы сразу теми, что объявлены в setCar..
Java
Зачем создают приватные переменные, а затем делают их общедоступными через публичные методы?
Во-первых, у тебя тут нет никакого "приравнивания к публичным" хотя бы потому, что getCar не возвращает в программу никаких значений. Другие классы не могут получить значения переменных.
Но даже если бы и могли, то все равно сохраняется инкапсуляция. Допустим, тебе на каком-то этапе понадобилось при каждом изменении цвета уведомлять полицию:
public void setCar(String brand, String paint, String style)
{
maker = brand ;
if(color!=paint){
color = paint ;
police.InformChange(this, color);
}
bodyType = style ;
}
Если бы color был публичным свойством, то тебе пришлось бы искать все случаи, где он изменяется, и вписывать туда уведомление полиции. А так - всегда изменения идут через этот метод, и любое исправление сразу применяется ко всей программе.
Но даже если бы и могли, то все равно сохраняется инкапсуляция. Допустим, тебе на каком-то этапе понадобилось при каждом изменении цвета уведомлять полицию:
public void setCar(String brand, String paint, String style)
{
maker = brand ;
if(color!=paint){
color = paint ;
police.InformChange(this, color);
}
bodyType = style ;
}
Если бы color был публичным свойством, то тебе пришлось бы искать все случаи, где он изменяется, и вписывать туда уведомление полиции. А так - всегда изменения идут через этот метод, и любое исправление сразу применяется ко всей программе.
понимаешь... если там тупо деревянные гет/сет напишешь, то понятно что толку мало. просто сделаешь как принято.
как тебе уже указали, можешь сделать только гет чтобы изменять не могли
но и в гет методе ты можешь сделать свою логику доступа
проверять кто просит доступ и давать или не давать по каким-то условиям.
или попутно проводить какие-то другие операции... допустим, подсчёт количества обращений к переменной.
всё ограничено лишь твоими фантазиями
почитал код твой внимательнее.... да уж...
как тебе уже указали, можешь сделать только гет чтобы изменять не могли
но и в гет методе ты можешь сделать свою логику доступа
проверять кто просит доступ и давать или не давать по каким-то условиям.
или попутно проводить какие-то другие операции... допустим, подсчёт количества обращений к переменной.
всё ограничено лишь твоими фантазиями
почитал код твой внимательнее.... да уж...
Так можно проконтролировать изменение переменных. Например, ограничить возможные значения. Простой пример:
void setNumber(int num) {
____if (num > 0) {
________this.num = num;
____} else {
________System.out.println("Число меньше нуля");
____}
}
Или же случай человека выше.
void setNumber(int num) {
____if (num > 0) {
________this.num = num;
____} else {
________System.out.println("Число меньше нуля");
____}
}
Или же случай человека выше.
Похожие вопросы
- Разве так можно связывать внешние переменные с переменными метода?
- почему одни переменные могут объявлять буквы другие цифры?
- Помогите пожалуйста написать методы,java, Кто даст ответ дам 100 балов подарком ОТВЕТ ДАЙТЕ СЕГОДНЯ ЭТО СРОЧНО!!!!!!!!!!
- Как сравнить элементы массива с другой переменной?
- Переменная в for loop
- Что делает store_(число) и load_(число) в байткоде метода класса?
- Где лучше обрабатывать исключения, напрямую в методе который их может создать или пробрасывать дальше через throws
- Как влияет использование модификатора final на локальные и глобальные переменные в Java
- Почему в Java метод main является static? Почему в Java метод main является static?
- почему выгодно переменные обявлять до цикла а не в цикле
Спасиб.
Подскажи, ещё плиз, что вот это за звери в скобках метода type(аналогичный пример):
String color, size, erasier;
public void type(String color1, String size1, String erasier1)
{
color = color1;
size = size1;
erasier = erasier1;
}
Это ведь то же переменные? Почему если их не вводить и сделать просто вот так программа выдаёт нули:
String color, size, erasier;
public void type(String color, String size, String erasier)
{
}