码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-05-12 12:32:39      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

后面的博文,我们将开始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 接口与抽象类

使用抽象类表示通用属性存在一个问题:每个类只能扩展于一个类。但每个类可以实现多个接口。

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

标签:

原文地址:http://blog.csdn.net/lipengcn/article/details/51361782

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!