在Java中修改私有实例变量

在Java中修改私有实例变量,java,Java,因此,我在一本Java书籍中找到了一个例子: public class Account { private String name; private double balance; private int acctNumber; public Account(){} public boolean equals(Account anotherAcc) { return (this.name.equals(anotherAcc.name)

因此,我在一本Java书籍中找到了一个例子:

public class Account {
    private String name;
    private double balance;
    private int acctNumber;

    public Account(){}

    public boolean equals(Account anotherAcc) {
        return (this.name.equals(anotherAcc.name)
                && (this.balance == anotherAcc.balance) && (this.acctNumber == anotherAcc.acctNumber));

    }


}
我们看到equals方法被重载,并与另一个Account对象一起传递,以检查所有实例变量是否相等。我对这段代码的问题是,我们似乎在直接访问另一个acc对象中的私有变量,这似乎不正确,但它可以工作。当我在同一个类中创建一个main方法时,也会发生同样的事情,在这个类中,我以某种方式获得了对私有变量的访问权


相反,当我在另一个类中创建一个main方法时,我只会得到一个可见性错误。我的问题是,为什么Java允许在方法中传递的对象中访问私有实例变量?是否因为对象的类型为帐户,并且传递给的方法是名为帐户的类的一部分?

私有
限制对同一类中代码的访问,不仅仅是同一个实例。

是因为对象的类型是Account,而传递给它的方法是Account类的一部分吗

私有
不仅意味着该对象,而且属于同一
的任何对象也可以访问。

请参见(我最喜欢的表):

由于您在同一个类中,
private
成员可用


如注释中所述,请注意,您没有重写正确的方法。原始对象(属于
对象
类)需要类型为
对象
的对象作为参数。

请注意,重写
等于
的正确方法是重写
公共布尔等于(对象其他)
我想你应该看到为什么我们需要在OOP中使用私有变量的链接,在equals方法上方添加注释@Override,看看会发生什么。他从来没有说过他要重写equals,但是重载了它。我明白了。这只是因为传入的对象恰好是同一个类,对吗?这显然不适用于任何其他对象类型。
Modifier    Class   Package Subclass  World
-------------------------------------------
public      Y       Y       Y         Y
protected   Y       Y       Y         N
no modifier Y       Y       N         N
private     Y       N       N         N  
            ↑
       You are here