如何使用继承覆盖equals()方法?

时间:2016-02-26 03:02:28

标签: java override subclass equals

我有一个名为" worker"的子类。扩展" Person"类。我试图覆盖" Person"中的equals()方法。在"工人"的子类中。任何人都可以解释我的尝试在基本覆盖方面是否正确吗?

public class Person {
    private String name;
    public Person(String n) {
        name = n;
    }
    public Person() {
        this("");
    }
    public String getName() {
        return name;
    }
    public String toString() {
        return getName() + " ";
    }
    public boolean equals(Object rhs) {
        if (!(rhs instanceof Person)) {
            return false;
        }
        Person other = (Person) rhs;
        return this.getName().equals(other.getName());
    }
    class Employee extends Person {
        double salary;
        public Employee(double b) {
            salary = b;
        }
        Employee() {
            salary = 150000;
        }
        public double getSalary() {
            return salary;
        }
        @Override
        public String toString() {
            return super.toString();
        }
        // my attempt
        @Override
        public boolean equals(Object rhs) {
            if (rhs == null) {
                return false;
            }
            if (getClass() != rhs.getClass()) {
                return false;
            }
            if (!super.equals(rhs))
                return false;
            else {
            }
            return false;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您可以正确地机械处理覆盖部分,但您的Employee类的equals方法永远不会返回true。

首先是因为:

  if (!super.equals(rhs)) return false; else { }

即使super.equals的结果为真,你也总会落到最后的回报中。

一旦你解决了这个问题,你仍然会遇到Person的equals方法的问题。如果传入Worker的实例,则equals方法将始终返回false。

可能还有其他的东西,但这两个都是显示停止者。

答案 1 :(得分:2)

NetBeans使用快捷键alt + insert,可以自动生成equals方法,构造函数,getter,setter,委托方法等。如果你想使用编码混合(Hashtable,HashMap,HashSet)来使用它,那么重新定义等于你必须重新定义hashCode()。