定义父类 Super,要求定义 int hashCode()方法、boolean equals(Object obj)方法。定义子 类 Suber,继承 Super 类,并覆盖上述定义的方法。要求用@Override 注解。定义主类 Main,要求 main 方法中,使用上述类,能
时间: 2024-02-09 17:13:13 浏览: 69
关于Object中equals方法和hashCode方法判断的分析
创建 Super 和 Suber 类的实例对象,并且能够比较它们的 hashCode 值和相等性。
以下是示例代码:
```java
class Super {
private int num;
public Super(int num) {
this.num = num;
}
@Override
public int hashCode() {
return num * 31; // 31 is an arbitrary prime number
}
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof Super)) {
return false;
}
Super other = (Super) obj;
return num == other.num;
}
}
class Suber extends Super {
private String name;
public Suber(int num, String name) {
super(num);
this.name = name;
}
@Override
public int hashCode() {
return name.hashCode() + super.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof Suber)) {
return false;
}
Suber other = (Suber) obj;
return super.equals(other) && name.equals(other.name);
}
}
public class Main {
public static void main(String[] args) {
Super s1 = new Super(123);
Super s2 = new Super(123);
System.out.println(s1.hashCode()); // 38013
System.out.println(s2.hashCode()); // 38013
System.out.println(s1.equals(s2)); // true
Suber sub1 = new Suber(123, "Alice");
Suber sub2 = new Suber(123, "Bob");
System.out.println(sub1.hashCode()); // 697205 + 38013 = 735218
System.out.println(sub2.hashCode()); // 697206 + 38013 = 735219
System.out.println(sub1.equals(sub2)); // false
Super sub3 = new Suber(123, "Alice");
System.out.println(sub1.equals(sub3)); // true
}
}
```
在 Super 类中,我们定义了 hashCode 和 equals 方法,其中 hashCode 方法将 num 属性与一个任意的质数相乘得到一个整数值,equals 方法比较两个对象是否相等,需要判断传入的对象是否是 Super 类型,以及 num 属性是否相等。
在 Suber 类中,我们继承了 Super 类,并且覆盖了 hashCode 和 equals 方法,其中 hashCode 方法将 name 属性的 hashCode 值加上父类的 hashCode 值得到一个新的 hashCode 值,equals 方法比较两个对象是否相等,需要判断传入的对象是否是 Suber 类型,以及 name 属性和父类的属性是否相等。
在 Main 类中,我们创建了 Super 和 Suber 类的实例对象,并且比较它们的 hashCode 值和相等性。需要注意的是,当我们创建 Suber 类的实例对象时,可以赋值给 Super 类型的变量,因为 Suber 类是 Super 类的子类,符合多态的特性。此时,我们可以调用 Super 类中的 hashCode 和 equals 方法,也可以调用 Suber 类中的 hashCode 和 equals 方法。
阅读全文