接口
不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。
比如:
Arrays类重点 sort方法对对象数组进行排序,前提是所属的类必须实现Comparable接口
public interface Comparable
{
int compareTo(Object other) ;
}
在调用x.compareTo(y)的时候,这个方法必须确实比较两个对象的内容,并返回比较多结果,当x小于y时,返回负数,当x大于y时,返回一个正数,当两者相等时,返回0.
也就是说任何实现Comparable接口的类都需要包含compareTo方法,并且这个方法中的参数必须是一个Object对象,返回一个整形数值
接口中的方法自动属于public
接口中决不能含有实例域,也不能在接口中实现方法,提供实例域和方法的任务应该由实现接口的那个类去完成,可以将接口看作是没有 实例域的抽象类,但两者之间还是有区别的。
在实现接口时,,必须把方法声明为public(否则编译器将认为这个方法的访问属性是包可见性,即类的默认访问属性)
上面的实现可以转换成:
class Employee implements Comparable<Employee>
{
public int compareTo(Employee other)
{
return Double.compare(salary, other.salary) ;
}
.....
}
从这个例子汇总可以看出一个类要想使用排序功能,必须要实现compareTo方法
int comapreTo(T other)
用这个对象与other进行比较,如果对象小雨other则返回负值,相等返回0,否则返回正值
static void sort(Object[] a)
使用mergesort算法对数组中的元素进行排序,要求数组中的元素必须属于实现了Comparable接口的类,并元素之间是可以比较多
static int compare(int x, int y)
如果x<y返回一个负整数,如果x=y返回0,否则返回一个正整数
接口不是类,不能用new运算符实例化一个接口,但是可以声明接口的变量
与接口中的方法自动设置成public一样,接口中的域自动设为public static final
有待补充