接口(Interface)的深入理解
Posted littlelittleprince
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口(Interface)的深入理解相关的知识,希望对你有一定的参考价值。
接口(Interface)的深入理解
一:接口是规范(不展开)
二:接口可以看成是一个特殊的类
1: 接口可以定义“接口类型变量”,就好像类可以定义类类型的变量(或者说是引用类型变量)。申明一个类类型的变量,然后我们通常使用构造器创建对象,并把该对象赋值给类类型的变量(或者说引用变量引用到我们创建的对象)。这样,我们就可以通过类类型的变量来操作我们实际new出来的对象。于此类似的,我们也可以创建接口类型的变量(或者说是接口类型的引用变量),并把一个实现了该接口的实现类的对象赋值给接口类型的引用变量(或者说接口类型的引用变量引用到该接口实现类的对象)。通过接口类型的变量,我们便可以调用实现了该接口的类的对象。从这看出,类和接口有相似的地方。它们都有多态的存在
代码如下
2:接口类型的引用变量,我们可以传一个实现该接口抽象方法的匿名内部类(匿名内部类会创建一个实现一个该接口抽象方法的对象)。本质上来说,还是通过接口类型的变量,来调用实现该接口创建出来的对象实例
代码如下
三: 接口可以理解为是一个功能模块
我们自己写的类通过实现Java提供的相应的接口,并重写接口的抽象方法,就可以得到我们想要的功能
举个例子
TreeSet是SortSet的子类,这意味着存入TreeSet的元素(对象),必须要有一个比较大小的方法,否者TreeSet无法保证元素是有序存放的
假设我们存放的是Person类的对象。Person类有name(String),age(int),两个成员变量。我们必须确保TreeSet有一个比较Person类的实例对象的方法
我们用先比较名字的字母顺序,在来比较年龄的大小的方法来排序
在这里我们可以有两种选择
实现Comparable接口,或者实现Comparator接口
先来使用Comparable接口
Person类实现Comparable接口,并重写compareTo()方法(原因:TreeSet在添加对象时,会调用对象的compareTo()来比较对象的大小)
代码如下
注:上述代码没有实现泛型
再来使用Comparator接口来实现
代码如下
结果相同
至于为什么要把Comparator的comparator作为参数传入TreeSet()构造器中,本人也是小白。我目前也不清楚
有人知道的话,可以说一下
以上是关于接口(Interface)的深入理解的主要内容,如果未能解决你的问题,请参考以下文章
深入delphi编程理解之接口接口与类的异同及接口的声明和实现