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

猜你喜欢

转载自blog.csdn.net/m0_54524462/article/details/120794564