gpt4 book ai didi

java - 等于方法

转载 作者:行者123 更新时间:2023-12-02 12:19:42 24 4
gpt4 key购买 nike

有一个Employee类和一个名为扩展Employee的Manager类。两者具有相同的字段,但 Manager 有一个额外的字段,称为 bonus。 Manager 的 equals 方法是:

public boolean equals(Object otherObject){
if(!super.equals(otherObject)
return false;
Manager other = (Manager) otherObjetc;
return this.bonus == other.bonus;
}

我们分别创建employeeObjmanagerObj作为Employee和Manager类的实例,这样它们的所有字段都是相同的(除了employeeObj没有的奖金)全部)。

那么如果我们调用managerObj.equals(employeeObj),if条件是否返回false?如果答案为“否”,那么我们是否会因为员工没有奖金字段而导致类型转换或后面的行出现任何错误?

这个例子来自的书声称 super.equals 检查 this 和 otherObjetc 是否属于同一类。但我认为他们没有考虑到如果我们将员工类的实例传递给该方法,该方法将引发异常。如果我错了请纠正我...

这是员工类的 equals 方法:

public boolean equals (Object otherObjetc){
if (this==otherObjetc)
return true;
if (otherObject == null)
return false;
if (getClass() != otherObject.getClass())
return false;
Employee other = (Employee) otherObject;
return name.equals(other.name) && salary==other.salary
}

最佳答案

Then if we call the managerObj.equals(employeeObj) does the if condition return false?

是的,它将返回 false。

if the answer is 'no', then do we get any error for the cast or the line after it because employee doesn't have a bonus field?

不,你不会得到 ClassCastException,因为

if(!super.equals(otherObject)) return false; 

完成执行并返回,但你没有到达

Manager other = (Manager) otherObject;

这可能会引发类转换异常。

使用 Employee 和 Manager 模型中定义的一些示例字段测试代码:

Employee employee = new Employee();
employee.setName("null");
employee.setSurname("pointer");
Manager manager = new Manager();
manager.setName("null");
manager.setSurname("pointer");
manager.setBonus(10);
System.out.println(manager.equals(employee));

编辑:原因

!super.equals(otherObject) 

评估为true并最终返回 false 是因为在其父类(super class)的 equals 范围内

if (getClass() != otherObject.getClass()) return false;

getClass()(计算为 Manager)和 otherObject.getClass()(计算为 Employee)都是不同的类。

关于java - 等于方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45869228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com