【发布时间】:2015-01-21 08:08:27
【问题描述】:
所以,我在我找到的一本 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 允许在方法中传递的对象中访问私有实例变量?是不是因为对象的类型是 Account 并且传递给的方法是名为 Account 的类的一部分?
【问题讨论】:
-
注意,覆盖
equals的正确方法是覆盖public boolean equals (Object other) -
我认为您应该看到链接为什么我们需要在 OOP 中使用私有变量 programmers.stackexchange.com/questions/143736/…
-
在你的equals方法上方添加注解@Override,看看会发生什么..
标签: java