0

假设我们有一个 Employee 类,它具有以下数据字段和函数。该程序试图通过比较它们的和来查看 2Employees是否相等nameaddress

public class Employee{
  private String name;
  private double hours;
  private double rate;
  private Address address;
    @Override
    public boolean equals(Object obj){
        if(obj == this) return true;
        if(obj == null) return false;
        if(this.getClass() == obj.getClass()){
            Employee other = (Employee) obj;
            return name.equals(other.name) && address.equals(other.address);
        }else{
            return false;
        }
    }

为什么我们不这样做public boolean equals(Employee obj)(不同的参数)?

4

1 回答 1

5

(1)如果你这样做new Empolyee().equals(null)- 这会发生。

(2) 因为Object声明了类equals(Object)- 并且您不能将Employee其作为参数来覆盖此方法。您只能在覆盖方法时扩大参数,切勿缩小参数。
如果你这样做会发生什么:

Object o = new Employee();
o.equals(new Object());

“方法”将不知道如何处理这种情况,虽然它是完全有效的并且在编译时无法知道(在一般情况下)。

为避免这种情况,在重写方法时不允许出现这种类型的差异,如果您尝试这样做,则会出现编译错误。

于 2012-10-15T23:48:53.597 回答