1

我想创建一个类,让我们说实现通用接口 Comparable 并覆盖方法 equals、hashCode 和 toString 的 Employee ......我该怎么做?

这样可以吗

interface MinMax<T extends Comparable<T>> {

T equals();
T hashCode();
T toString();

}

class Employee<T extends Comparable<T>> implements MinMax<T> {

 public T equals(){

  }

  public T hashCode(){

  }

  public T toString(){

  }



  }
4

3 回答 3

2

这个问题有两个部分。

第 1 部分:覆盖 equals、hashCode 和 toString。

只需使用新实现在新类中重新定义这些方法。

class Employee {

    //fields and other methods

    public boolean equals(Object other) {
        //new implementation here
    }
    public int hashCode() {
        //make sure two equal objects produce the same hashCode
    }
    public String toString() {
        //return whatever you want here
    }
}

第 2 部分:实现 Comparable 接口。

我假设您希望与其他员工进行比较。声明它实现了Comparable,并实现了接口描述的compareTo方法。

public Employee implements Comparable<Employee> {

    //fields and methods

    public int compareTo(Employee e) {
        //new implementation. Should probably be consistent with equals.
    }
}
于 2012-09-12T00:09:35.203 回答
1

一个类可以实现任意数量的接口,也不需要对它们进行“分组”:

class Employee implements Comparable, MinMax{ ... }

无论如何,您必须提供接口方法实现。

于 2012-09-11T23:50:57.530 回答
0

为此,您无需创建自己的单独界面。

Equals、hashCode 和 toString 是对象类的方法,您的新类将自动成为其子类,因此无需您做任何事情,它就可以访问这些方法。要覆盖这些方法,只需在新类中使用您希望方法执行的操作创建同名方法。

Comparable 是一个通用接口,因此您需要将字母 T 替换为所需的类。由于您可能希望将该类的成员与同一类的另一个成员进行比较,因此您将其替换为 Employee。你的类本身不需要是通用的,即使它实现了一个通用接口,所以你的代码中不应该有任何'T'

“扩展”一词适用于您要创建一个作为另一个类的子类的类。或者当您希望进入通用接口的类成为某个类的子类时。你不需要为你的班级这样做,所以在任何地方都不需要扩展这个词。

于 2013-09-21T20:49:02.043 回答