您的位置:首页 > 编程语言 > Java开发

Java核心技术(六) —— 接口

2016-05-10 15:14 501 查看
后面的博文,我们将开始Java的常用高级技术学习。

接口技术,主要用来描述类具有什么样的功能,而并不给出每个功能的具体实现。一个类可以实现(implement)一个或多个接口,并在需要接口的地方,随时使用实现了相应接口的对象。

本文,我们将从以下几个主要方面对接口进行深入学习

接口

对象克隆

接口与回调

此外还有经常用到的Comparable和Comparator接口。

1、接口

接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。

下面我们来看下Comparable接口的代码

public interface Comparable
{
int compareTo(Object other);
}


即任何实现 Comparable接口的类都需要包含CompareTo方法,而这个方法的参数必须是一个Object对象。

(1)实际上,现在的Comparable接口已经改进成了泛型类型

public interface Comparable<T>
{
int compareTo(T other);
}


(2)接口中的所有方法都自动属于public,因此,在接口中声明方法时,不必再提供关键字public。

(3)在调用
x.compareTo(y)
的时候,当x小于y时,返回一个负数,相等时返回0,否则返回一个正数

(4)接口中可以包含多个方法,可以定义常量,但绝不能含有实例域,也不能在接口中实现方法。提供实例域和方法实现的任务应该由实现接口的那个类来完成。此外,接口中的域都被自动设为public static final。

那么,如果希望使用Arrays类的sort方法对Employee对象数组进行排序,Employee类就必须实现Comparable接口。

为了让类实现一个接口,通常需要:

将类声明为实现给定的接口(使用关键字implements)

对接口中的所有方法进行定义

(1)将类声明为实现给定的接口,需要使用关键字implements:

class Employee implements Comparable


(2)然后为Employee类提供compareTo方法,假设希望根据Employee的salary进行比较

public int compareTo(Object otherObject)
{
Employee other = (Employee) otherObject;
return Double.compare(salary, other.salary);
}


注意,在接口声明中不必将compareTo方法声明为public(前1);但是在实现接口时,必须将方法声明为public(后2)。

为了避免总是出现Object的类型转换,可以将上面的实现替换为对
Comparable<Employee>
接口的实现

class Employee implements Comparable<Employee>
{
public int compareTo(Employee other)
{
return Double.compare(salary, other.salary);
}
···
}


1.1 接口的特性

接口不是类,尤其不能使用new运算符实例化一个借口

x = new Comparable(···); \\Error


然而,尽管不能构造接口的对象,却能声明接口的变量

Comparable x; \\OK


而且接口变量必须引用实现了接口的类对象

x = new Employee(···); \\OK


1.2 接口与抽象类

使用抽象类表示通用属性存在一个问题:每个类只能扩展于一个类。但每个类可以实现多个接口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: