Рассмотрим этот класс Java:
public class Base {
private int a
protected int b;
public Base(int a,int b) {
this.a = a;
this.b = b;
}
public int getA() {
return a;
}
public int getB() {
return b;
}
}
...
Base foo = new Base(1,2);
Base bar = new Base(3,4);
Нет никакого способа (возможно, кроме как через грязное отражение), экземпляр foo
может изменить защищенную или частную переменную в bar
Вы можете позволить это, если хотите,
public class Base {
private int a
protected int b;
public Base(int a,int b) {
this.a = a;
this.b = b;
}
public int getA() {
return a;
}
public int getB() {
return b;
}
public void changeB(int newB,Base other) {
other.b = newB;
}
}
...
Base foo = new Base(1,2);
Base bar = new Base(3,4);
foo.changeB(5,bar);
Вы не можете защитить метод changeB
от изменения содержимого объекта other
[*], вам просто нужно быть осторожным с тем, что делает ваша программа. В некоторых языках вы могли бы пометить аргумент other
как неизменяемый, но не в Java - я не считаю это большой проблемой.
[*} Вы могли бы, пометив все поля Base
как окончательные, хотя тогда даже сам экземпляр не мог бы изменить члены после создания объекта.
person
nos
schedule
08.10.2010