复制代码
public class People implements Comparable<People> {
...
public int compareTo(People p) {
//定义具体的比较标准
}
...
}实际上,Arrays.sort方法之所以要求它所比较的对象需实现了Comparable接口,是因为它在比较对象时调用的对象的compareTo方法(因为它不知道评价一个对象大小的标准,这个标准是由我们来定的)。那么,我们为什么不直接在People类中定义一个compareTo实例方法来定义People对象的比较标准,而是要去实现一个Comparable<T>接口呢?让我们举例来说明以下,假如我们调用了以下代码来对People对象数组peoples进行比较:
既然已经知道了为什么要使用接口,接下来让我们多了解下接口到底有什么特性。
首先,接口本身的访问修饰符可以为public或protected,接口中的所有方法都只能是public(所以可以不加这个修饰符)。其次接口中可以定义常量,但不能包含实例变量(提供实例变量这个活应该交给接口的实现类)。使用接口的步骤也很简单,正如我们上面提到的,只需要用关键子implements加上接口名表示这个类要实现这个接口,然后在类的定义中定义接口所要求实现的方法即可。
接口只是一种规范,所以我们不能用new实例化一个接口。但是我们可以声明接口类型的变量,接口变量只能引用实现了该接口的类对象,比如以下代码:
Comparable<People> p = new People(...);
虽然接口不是类,但我们也可以使用instanceof来判断一个对象是否实现了某个接口:
if (p instanceof Comparable) {
...
}
我们也可以”继承“一个接口:
public interface InA extends InB {
...
}