6-3(选做) jmu-Java-03面向对象基础-覆盖与equals

Person类,Company类,Employee类。

其中Employee类继承自Person类,属性为:

private Company company;
private double salary;

现在要求覆盖Employee类的equals方法,判定两个Employee对象是否相等,请见如下判断方法:

  1. 其继承自父类Person的属性值都相等,其company属性对象equals返回true,且其salary也相等。

  2. 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);
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值