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

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

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

时间: 2024-08-30 13:03:22

Java核心技术(六) —— 接口的相关文章

学习笔记——Java核心技术之接口、继承与多态练习题

1.创建一个抽象类,验证它是否可以实例化对象. package com.lzw; public abstract class UseCase3 { abstract void doit(); public static void main(String args[]){ new UseCase3(); } } 2.尝试创建一个父类,在父类中创建两个方法,在子类中覆盖第二个方法,为子类创建一个对象,将它向上转型到基类并调用这个方法. package com.lzw; public class Us

Java核心技术 第六章 接口和内部类

Java核心技术  第六章  接口与内部类 接口: 任何实现Comparable接口的类都需要包含compareTo方法,并且这个方法的参数必须是一个Object对象,返回一个整数数值. 在Java SE 5.0中,Comparable接口已经改进为泛型类型. 接口中所有的方法自动的属于public.因此,在接口中声明方法时,不必提供关键字public. 接口中决不能含有实例域,也不能在接口中实现方法. 要让一个类使用排序服务,必须让它实现compareTo方法,因此必须实现Comparable

Java核心技术第六章--接口

一.接口 1.1.接口概念 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念.类描述对象的属性和方法.接口则包含类要实现的方法. 除非实现接口的类是抽象类,否则该类要定义接口中的所有方法. 接口无法被实例化,但是可以被实现.一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类.另外,在

“全栈2019”Java第六十章:如何定义接口

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第六十章:如何定义接口 下一章 "全栈2019"Java第六十一章:如何实现接口? 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组". 全

“全栈2019”Java第六十一章:如何实现接口?

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第六十一章:如何实现接口? 下一章 "全栈2019"Java第六十二章:接口与常量详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组".

“全栈2019”Java第六十三章:接口与抽象方法详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第六十三章:接口与抽象方法详解 下一章 "全栈2019"Java第六十四章:接口与静态方法详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&qu

“全栈2019”Java第六十四章:接口与静态方法详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第六十四章:接口与静态方法详解 下一章 "全栈2019"Java第六十五章:接口与默认方法详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&qu

Java核心技术 卷一 笔记六 Date类

在Java核心技术卷就行了一前期  date类出现的频率很高  所以就对date类进行了小小的整合 Date类有两个 date类 表示特定时间的类 这个构造函数分配一个Date对象并初始化它代表指定的毫秒数,因为被称为"纪元",即1970年1月1日00:00:00 GMT标准基准时间. 就像格林尼治时间一样  作为一种基准值而存在 一般常用的是date转为string类型 String s=new Date(0).toString(); System.out.println(s.toS

《Java核心技术 卷1 基础知识》三

<Java核心技术 卷1 基础知识> 第六章 接口和内部类 接口不是类,而是对类的的一组需求描述. 接口不能包含实例域--接口没有实例 可以将接口看作没有实例域的抽象类 要将类声明为实现某个接口,需要使用关键字implements. 类实现一个接口的具体步骤为: 1)使用implements关键字进行声明要实现的接口 2)对接口中的所有方法进行定义 接口中的所有方法默认为public 但在实现接口时需要声明为public 这里介绍了Comparable接口,该接口只有一个方法,compareT

java第六周学习总结

学号20145336 <Java程序设计>第五周学习总结 教材学习内容总结 第十章 输入与输出 InputStream与OutputStream java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象.从程序角度来看,如果将数据从来源中取出,可以使用输入串流,如果将数据写入目的地可以使用输出串流.在java中,输入串流对象为java.io.InputStream实例,输出串流对象为java.io.OutputStream实例.流(Stream)是对「输入输出」的抽象,注意「