1. Employee.java
import java.util.Date;
import java.util.Objects;
public class Employee {
private String name;
private double salary;
private Date hireDay;
//1.为了避免定义一个完全无关的办法.使用@Override对覆盖超类的方法标记.
//2.将显式参数命名为otherObject,之后会将其转换为other.
@Override
public boolean equals(Object otherObject){
//3.检测是否引用同一个对象,这一步的好处是尽量避免对比每一个域.
if(this==otherObject) return true;
//4.检测对象是否为空
if(null==otherObject) return false;
//5.比较this和otherObject是否属于同一个类.
/*
* 5.1 如果equals的语义在子类中有所改变,就使用getClass()方法检测.
* 5.2 否则,使用instanceof关键字检测:
* if(!(getClass() instanceof otherObject.getClass()))
*/
if(getClass()!=otherObject.getClass()) return false;
//6.将otherObject强转为相应类型的变量.
/*
* 使用Objects.equals(a,b),两者都是null返回true,仅一个返回false,否则调用a.equals(b)
* 主要是为了防备域都是null的情况
*/
Employee other = (Employee) otherObject;
//7.如果子类重新定义了equals方法,需要包含调用super.equals(other).
return super.equals(other)
&&Objects.equals(name, other.name)
&& salary==other.salary
&& Objects.equals(hireDay, other.hireDay);
}
}
2.简写版equals方法.SimplifiedVersionEquals()
这个方法行不通的!!!哈哈哈哈,被骗了吧,主要是需要形参为Employee类型才能使用other.name,但是一旦需要在代码中进行强转那就不是简写版了.