定义父类 Super,要求定义 int hashCode()方法、boolean equals(Object obj)方法。定义子 类 Suber,继承 Super 类,并覆盖上述定义的方法。要求用@Override 注解。定义主类 Main,要求 main 方法中,使用上述类,能体现动态绑定。
时间: 2024-02-09 20:13:18 浏览: 66
关于Object中equals方法和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;
}
public void print() {
System.out.println("Super: " + 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);
}
@Override
public void print() {
System.out.println("Suber: " + name + " " + hashCode());
}
}
public class Main {
public static void main(String[] args) {
Super s = new Suber(123, "Alice");
s.print(); // Suber: Alice 735218
}
}
```
在 Super 类中定义了 hashCode 和 equals 方法,以及一个 print 方法,用于输出 num 属性的值。
在 Suber 类中继承了 Super 类,并且覆盖了 hashCode、equals 和 print 方法,其中 hashCode 方法将 name 属性的 hashCode 值加上父类的 hashCode 值得到一个新的 hashCode 值,equals 方法比较两个对象是否相等,需要判断传入的对象是否是 Suber 类型,以及 name 属性和父类的属性是否相等,print 方法输出 Suber 类的信息。
在 Main 类中,我们创建了一个 Suber 类的实例对象,并且将它赋值给了 Super 类型的变量 s,这里体现了动态绑定的特性。当我们调用 s 的 print 方法时,会输出 Suber 类的信息,而不是 Super 类的信息,这是因为变量 s 实际上引用的是 Suber 对象。这也体现了多态的特性,即父类类型的变量可以引用子类对象。
阅读全文