- 主要重写了父类的equals,hashCode,toString方法(来源于<
package equals;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Objects;
public class Employee {
private String name;
private double salary;
private Date hireDay;
public Employee(String name,double salary,int year,int month,int day) {
this.name=name;
this.salary=salary;
GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
hireDay=calendar.getTime();
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public Date getHireDay() {
return hireDay;
}
public void raiseSalary(double byPercent) {
double raise=salary*byPercent/100;
salary+=raise;
}
public boolean equals(Object otherObject) {
if(this==otherObject) return true;
if(otherObject==null) return false;
if(getClass()!=otherObject.getClass()) return false;
Employee other=(Employee)otherObject;
return Objects.equals(name, other.name) && salary==other.salary && Objects.equals(hireDay, other.hireDay);
}
public int hashCode() {
return Objects.hash(name,salary,hireDay);
}
public String toString() {
return getClass().getName()+"[name="+name+",salary="+salary+",hireDay="+hireDay;
}
}
package equals;
public class Manager extends Employee {
private double bonus;
public Manager(String name, double salary, int year, int month, int day) {
super(name, salary, year, month, day);
bonus=0;
}
public double getSalary() {
double baseSalary=super.getSalary();
return baseSalary+bonus;
}
public void setBonus(double b) {
bonus=b;
}
public boolean equals(Object otherObject) {
if(!super.equals(otherObject)) return false;
Manager other=(Manager)otherObject;
return bonus==other.bonus;
}
public int hashCode() {
return super.hashCode()+17 * new Double(bonus).hashCode();
}
public String toString() {
return super.toString()+"bonus="+bonus+"]";
}
}
package equals;
/**
* This program have override including equals(),hashCode(),toString()
* @author
*
*/
public class EqualsTest {
public static void main(String[] args) {
Employee alice1=new Employee("alice adams", 75000, 2000, 4, 2);
Employee alice2=alice1;
Employee alice3=new Employee("alice adams", 75000, 2000, 4, 2);
Employee bob=new Employee("bob", 90000, 1999, 10, 1);
System.out.println("alice1==alice2:"+(alice1==alice2));
System.out.println("alice1==alice3:"+(alice1==alice3));
System.out.println("alice1.equals(alice3):"+(alice1.equals(alice3)));
System.out.println("alice1.equals(bob):"+(alice1.equals(bob)));
System.out.println("bob.toString():"+bob);
Manager carl=new Manager("Carl Cracker", 80000, 1999, 1, 1);
Manager boss=new Manager("Carl Cracker", 80000, 1999, 1, 1);
boss.setBonus(5000);
System.out.println("boss.toString():"+boss);
System.out.println("carl.equals(boss):"+carl.equals(boss));
System.out.println("alice1 hashcode:"+alice1.hashCode());
System.out.println("alice3 hashcode:"+alice3.hashCode());
System.out.println("bob hashcode:"+bob.hashCode());
System.out.println("carl hashcode:"+carl.hashCode());
}
}
output:
alice1==alice2:true
alice1==alice3:false
alice1.equals(alice3):true
alice1.equals(bob):false
bob.toString():equals.Employee[name=bob,salary=90000.0,hireDay=Fri Oct 01 00:00:00 CST 1999
boss.toString():equals.Manager[name=Carl Cracker,salary=80000.0,hireDay=Fri Jan 01 00:00:00 CST 1999bonus=5000.0]
carl.equals(boss):false
alice1 hashcode:2140489185
alice3 hashcode:2140489185
bob hashcode:1924245678
carl hashcode:-53866413