栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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));
	}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/327882.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号