gpt4 book ai didi

java - 重写equals方法时,我们只使用 'Object obj'作为参数吗?

转载 作者:搜寻专家 更新时间:2023-11-01 01:09:53 26 4
gpt4 key购买 nike

我的任务是:

Override the equals() and hashCode() methods appropriately in your Rational Numbers class.

它进一步扩展了 this .我的问题是,当你覆盖equals方法时,你改变了传入的参数吗?如果它检查逻辑等价性,那么我已经完成了以下操作:

public boolean equals(Rational rhs){
if(this.num == rhs.num && this.denom == rhs.denom){
return true;
}
return false;
}

我不确定这是否是重写方法时要走的路。如果是,那么当您覆盖 hashcode 方法时,是否只是选择一段好的代码来分配 hashcode 的简单工作?

此外,这是我创建的哈希码。这是正确的路线吗?

@Override
public int hashCode(){
int hc = 17;
hc = 37 * hc + ((num == 0 && denom == 0) ? 0 : num);
return 37 * hc + denom;


//boolean b = cond ? boolExpr1 : boolExpr2;
//if cond true then b=boolExpr1 else b=boolExpr2
}

最佳答案

您的equals 方法不会覆盖Objectequals。为了覆盖它,参数必须是一个 Object

@Override
public boolean equals(Object other){
if (!(other instanceof Rational))
return false;
Rational rhs = (Rational) other;
if(this.num == rhs.num && this.denom == rhs.denom){
return true;
}
return false;
}

请注意,@Override 注释可帮助您检测您打算重写方法但实际上重载了方法的情况。如果您将该注释放在原始方法中,您将得到一个编译错误,因为您的方法没有覆盖任何方法(假设您的 Rational 类没有扩展或实现某些包含的类/接口(interface)boolean equals(Rational rhs) 方法)。

关于java - 重写equals方法时,我们只使用 'Object obj'作为参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35864339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com