Частный экземпляр и видимость получателя в Java
И спасибо всем за исправление форматов и т. д.
Недавно я начал изучать java, и во время одного упражнения у меня возник вопрос, извините, если я пропустил правила публикации:
чтобы вычислить расстояние от одной MyPoint до другой Mypoint, я решил использовать геттер для MyPoint другой, так как x и y для другого должны быть частными и не могут использоваться в точечной операции (another.x another.y);
public class MyPoint {
private int x;
private int y;
public int getX() {
return x;
}
public int getY() {
return y;
}
public double distance(MyPoint another) {
int xDiff = this.x - another.getX(); //getter
int yDiff = this.y - another.getY(); // getter
return Math.sqrt(xDiff * xDiff + yDiff * yDiff);
}
}
public class TestMyPoint {
public static void main(String[] args) {
MyPoint a = new MyPoint(3,0);
MyPoint b = new MyPoint(0,4);
System.out.println(a.distance(b)); // this works fine;
}
}
однако, если я вернусь к коду и изменим another.getX() на another.x, код все еще работает. и то же самое для вас.
public class MyPoint {
private int x;
private int y;
public MyPoint(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public double distance(MyPoint another) {
int xDiff = this.x - another.x; //no getter
int yDiff = this.y - another.y; //no getter
return Math.sqrt(xDiff * xDiff + yDiff * yDiff);
}
}
public class TestMyPoint {
public static void main(String[] args) {
MyPoint a = new MyPoint(3,0);
MyPoint b = new MyPoint(0,4);
System.out.println(a.distance(b)); // this still works fine;
}
}
я подумал, так как другой - это класс MyPoint, а экземпляры x и y являются частными, для.x и.y нет способа работать, и в этом весь смысл установки экземпляра private и использования геттера.
Что я упустил?
1 ответ
private
означает, что к полям можно получить доступ только изнутри MyPoint
, Это не означает, что к ним можно получить доступ только с одного и того же экземпляра MyPoint
, Это совершенно законно для методов, которые работают на "других" экземплярах, особенно equals
а также compareTo
, чтобы получить доступ к частному состоянию в других экземплярах того же класса.