有Person
类,Company
类,Employee
类。
其中Employee
类继承自Person
类,属性为:
private Company company;
private double salary;
现在要求覆盖Employee类的equals
方法,判定两个Employee对象是否相等,请见如下判断方法:
-
其继承自父类Person的属性值都相等,其company属性对象equals返回true,且其salary也相等。
-
salary是double型,比较时,使用DecimalFormat df = new DecimalFormat("#.##");使salary保留两位小数,然后再进行比较。
注意:要考虑company为null
的情况。
函数接口定义:
public boolean equals(Object obj)
输入样例:
此题无输入样例。main方法中已经包含多种不同的测试情况,下面的输出就是这多种测试情况的输出。
输出样例:
false
true
false
true
false
true
false
题目分析:
要求我们在Java中覆盖equals方法,以便在比较两个Employee对象时,可以根据以下的规则来判断它们是否相等。
1. Employee对象继承自Person类的属性值都必须相等。
2. Employee对象的company属性对象的equals方法返回true。
3. Employee对象的salary属性值也必须相等。在比较salary时,需要使用DecimalFormat类将salary格式化为保留两位小数的字符串,然后再进行比较。
4. 需要考虑company属性为null的情况。
在实现这个equals方法时,我们需要遵循Java中覆盖equals方法的一般规则,包括自反性,对称性,传递性,一致性,以及对于任何非null的x,x.equals(null)应该返回false。
这个问题的主要挑战在于正确地处理null值和浮点数的比较。对于null值,我们需要确保在调用equals方法之前检查对象是否为null。对于浮点数,由于精度问题,我们不能直接比较两个浮点数是否相等,而是需要将它们格式化为字符串后再进行比较。
流程图:
代码实现:
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Employee employee = (Employee) obj;
DecimalFormat df = new DecimalFormat("#.##");
String salary1 = df.format(this.salary);
String salary2 = df.format(employee.salary);
if (this.company == null) {
if (employee.company != null) {
return false;
}
} else if (!this.company.equals(employee.company)) {
return false;
}
return super.equals(obj) && salary1.equals(salary2);
}