重写equals方法规范

规则:

在这里插入图片描述

注意点:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下图重写equals方法

重写equals、hashCode、toString(雇员经理例子)

Employee类

package com.cxf.EqualsHashCodeDemo;

import java.time.LocalDate;
import java.util.Objects;

public class Employee {
    private String name;
    private double salsry;
    private LocalDate hireDay;

    public Employee(String name,double salsry,int year,int month,int day){
        this.name = name;
        this.salsry = salsry;
        hireDay = LocalDate.of(year,month,day);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalsry() {
        return salsry;
    }

    public void setSalsry(double salsry) {
        this.salsry = salsry;
    }

    public LocalDate getHireDay() {
        return hireDay;
    }

    public void setHireDay(LocalDate hireDay) {
        this.hireDay = hireDay;
    }

    public void raiseSalary(double byPercent){
        double raise = salsry * byPercent / 100;
        salsry += raise;
    }

    @Override
    public boolean equals(Object otherObject) {
        if (this == otherObject) return true;
        if (otherObject == null || getClass() != otherObject.getClass()) return false;
        Employee other = (Employee) otherObject;
        return Objects.equals(name,other.name) && salsry == other.salsry
                && Objects.equals(hireDay,other.hireDay);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, salsry, hireDay);
    }

    @Override
    public String toString() {
        return getClass().getName() + "Employee{" +
                "name='" + name + '\'' +
                ", salsry=" + salsry +
                ", hireDay=" + hireDay +
                '}';
    }
}

Manager类

package com.cxf.EqualsHashCodeDemo;


public class Manager extends Employee {

    private double bonus;

    public Manager(String name, double salsry, int year, int month, int day) {
        super(name, salsry, year, month, day);
        bonus = 0;
    }

    public double getSalary() {
        double baseSalary = super.getSalsry();
        return baseSalary + bonus;
    }

    public void setBonus(double bonus){
        this.bonus = bonus;
    }

    @Override
    public boolean equals(Object otherObject){
        if (!super.equals(otherObject)) return false;
        Manager other = (Manager) otherObject;
        return bonus == other.bonus;
    }

    @Override
    public int hashCode() {
        return super.hashCode() + 17 * new Double(bonus).hashCode();
    }

    @Override
    public String toString(){
        return super.toString() + "[bonus=" + bonus + "]";
    }
}

测试

package com.cxf.EqualsHashCodeDemo;

public class EqualsTest {
    public static void main(String[] args) {
        Employee emp1 = new Employee("Lucy",75000,1987,12,15);
        Employee emp2 = emp1;
        Employee emp3 = new Employee("Lucy",75000,1987,12,15);
        Employee bob = new Employee("Bob",50000,1989,10,1);

        System.out.println("emp1 == emp2: " + (emp1 == emp2));
        System.out.println("emp1 == emp3: " + (emp1 == emp3));
        System.out.println("emp1.equals(emp3): " + (emp1.equals(emp3)));
        System.out.println("emp1.equals(bob): " + (emp1.equals(bob)));
        System.out.println("bob.toString(): " + bob.toString());

        Manager man1 = new Manager("Tom",80000,1987,12,15);
        Manager boss = new Manager("Tom",80000,1987,12,15);
        boss.setBonus(5000);
        System.out.println("============================================================");
        System.out.println("boss.toString(): " + boss);
        System.out.println("man1.equals(boss): " + man1.equals(boss));
        System.out.println("emp1.hashCode(): " + emp1.hashCode());
        System.out.println("emp3.hashCode(): " + emp3.hashCode());
        System.out.println("bob.hashCode(): " + bob.hashCode());
        System.out.println("man1.hashCode(): " + man1.hashCode());
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值