我有一个名为" 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;
}
}
}
答案 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()。