在Java中修改私有实例变量
因此,我在一本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)
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