f4.3 jmu-Java-03面向对象基础-覆盖与equals (6 分)

f4.3 jmu-Java-03面向对象基础-覆盖与equals (6 分)

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)

输入样例:


输出样例:

false
true
false
true
false
true
false

题目分析

在这里插入图片描述

  • 默认的equals函数的第一个比较:都要最先比较当前类和传入的类的引用是不是相同,就相当于是比较身份证,如果身份证号相同,直接默认这是同一个人。
  • 接着几乎也是一个惯用的比较:需要先判断传入的类是否为空,若传入的类为空则直接返回false。
  • 题目的要求有三个需要比较的类型:
    • 首先是要比较父类的属性是否都相等,于是我们就用super调用父类的equals函数,直接比较两个类的父类。
    • 然后是要比较company,并且要考虑company为空的情况,而company还分为本类的company,传入类的company,一共要讨论4种情况,其中,最首先是两者同时为null的情况,就默认这两者相同,直接返回浮点数的比较结果,要注意的是,当有一方为null的时候,我们就不能通过调用它的equals函数来判断是否相等了,否则会报错应直接用==接下来是两者中有一个为null的情况,都直接返回false;再接着是两者都不为空的情况,那就调用equals函数来比较两个company是否相等。
    • 最后是要对浮点数进行比较,就按照题目的提示预先设置好浮点数的格式后,再按设定好的格式调用equals函数来比较即可。

我的代码:

public boolean equals(Object obj) {
        //直接比较引用的地址码是否相同
		if (this == obj) return true;
        //判断传入的参数是否为null
		if (obj == null) return false;
        //判断父类的属性是否相同
    	if (!super.equals(obj)) return false;
        //浮点数的比较和company为null的情况的辨析
		DecimalFormat df = new DecimalFormat("#.##");
		Employee other = (Employee) obj;
        if (company == null && other.company == null) 
        	return df.format(salary).equals(df.format(other.salary));
        else if (company == null || other.company == null) return false;
		return company.equals(other.company)
				&& df.format(salary).equals(df.format(other.salary));
	}
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驼同学.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值