Частный экземпляр и видимость получателя в 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, чтобы получить доступ к частному состоянию в других экземплярах того же класса.

Другие вопросы по тегам