所以,我在一本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对象一起传递,以检查所有实例变量是否相等。我对这段代码的问题在于,我们认为我们正在直接访问 anotherAcc 对象中的私有变量,这似乎不对,但它确实有效。当我在同一个类中创建一个main方法时,我会以某种方式访问私有变量,同样的事情发生。
相反,当我在另一个类中创建一个main方法时,才会出现可见性错误。我的问题是,为什么Java允许在方法中传递的对象中访问私有实例变量?是因为对象的类型为帐户,传递给的方法是名为帐户的类的一部分吗?
答案 0 :(得分:9)
参见(我最喜欢的表格)Controlling Access to Members of a Class:
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
由于您已加入相同的类,private
成员 可用。
正如评论中所述,请注意您未覆盖正确的equals
方法。原始的Object
类)期望类型为Object
的对象作为参数。
答案 1 :(得分:3)
是因为对象是Account类型而传递给的方法是名为Account的类的一部分吗?
是,private
不仅意味着该对象,而且属于同一class
的任何对象也可以访问。
答案 2 :(得分:2)
private
限制访问同一类中的代码,而不仅限于同一个实例。