java重写Object类方法

  • 主要重写了父类的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);
        // TODO Auto-generated constructor stub
        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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值