当我account1.equals(account2)
时,我必须将equals()
方法中的account2转发回其子类引用BankAccount compareAccount = (BankAccount)obj;
,以便我可以访问子类字段。一旦我转发它,我就可以compareAccount.accountAmount
现在我的问题
但是在这个脚本中,我不需要向下转换account1对象以使用equals()
方法中的字段。我想,因为我已经将它升级为对象Object account1 = new BankAccount(300.22, 122222)
我无法看到它的字段,因此this.accountAmount
在我回到子类之前不会工作。 那么为什么会这样,为什么account1不需要被低估?
public class BankAccountDemo
{
public static void main(String[] args)
{
Object account1 = new BankAccount(300.22, 122222);
Object account2 = new BankAccount(333.10, 23432434);
if(account1.equals(account2))
{
System.out.println("The objects are equals");
}
else
{
System.out.println("These objects are not equal");
}
}
}
对象类
public class BankAccount
{
private double accountAmount;
private int accountNumber;
public BankAccount(double accountAmount, int accountNumber)
{
this.accountAmount = accountAmount;
this.accountNumber = accountNumber;
}
@Override
public boolean equals(Object obj)
{
BankAccount compareAccount = (BankAccount)obj;
boolean result;
if (this.accountAmount == compareAccount.accountAmount && this.accountNumber == compareAccount.accountNumber)
{
result = true;
}
else
{
result = false;
}
return result;
}
}
答案 0 :(得分:0)
原因是只调用BankAccount
的equals方法。因此,这种方法可以自然地访问所有类的成员。
在
中调用BankAccount
的等于方法
Object account1 = new BankAccount(300.22, 122222);
Object account2 = new BankAccount(333.10, 23432434);
if(account1.equals(account2)) { … }
因为方法总是虚拟的,所以调用实例类型equals
(account1
)的BankAccount
方法 - 而不是声明的类型(Object
)。
但是,您应该考虑重新考虑您的设计。搜索有关如何编写equals
的说明。
特别是,只有在确定参数为BankAccount
或至少BankAccount为assignable from对象的类之后,才将参数强制转换为instanceof BankAccount
。