接口(Interface)的深刻理解

接口(Interface)的深刻理解spa

一:接口是规范(不展开)对象

二:接口能够当作是一个特殊的类blog

1: 接口能够定义“接口类型变量”,就好像类能够定义类类型的变量(或者说是引用类型变量)。申明一个类类型的变量,而后咱们一般使用构造器建立对象,并把该对象赋值给类类型的变量(或者说引用变量引用到咱们建立的对象)。这样,咱们就能够经过类类型的变量来操做咱们实际new出来的对象。于此相似的,咱们也能够建立接口类型的变量(或者说是接口类型的引用变量),并把一个实现了该接口的实现类的对象赋值给接口类型的引用变量(或者说接口类型的引用变量引用到该接口实现类的对象)。经过接口类型的变量,咱们即可以调用实现了该接口的类的对象。从这看出,类和接口有类似的地方。它们都有多态的存在排序

代码以下接口

 

 

2:接口类型的引用变量,咱们能够传一个实现该接口抽象方法的匿名内部类(匿名内部类会建立一个实现一个该接口抽象方法的对象)。本质上来讲,仍是经过接口类型的变量,来调用实现该接口建立出来的对象实例泛型

代码以下变量

 

 

三: 接口能够理解为是一个功能模块引用

咱们本身写的类经过实现Java提供的相应的接口,并重写接口的抽象方法,就能够获得咱们想要的功能方法

举个例子im

TreeSet是SortSet的子类,这意味着存入TreeSet的元素(对象),必需要有一个比较大小的方法,否者TreeSet没法保证元素是有序存放的

假设咱们存放的是Person类的对象。Person类有name(String),age(int),两个成员变量。咱们必须确保TreeSet有一个比较Person类的实例对象的方法

咱们用先比较名字的字母顺序,在来比较年龄的大小的方法来排序

在这里咱们能够有两种选择

实现Comparable接口,或者实现Comparator接口

先来使用Comparable接口

Person类实现Comparable接口,并重写compareTo()方法(缘由:TreeSet在添加对象时,会调用对象的compareTo()来比较对象的大小)

代码以下

注:上述代码没有实现泛型

再来使用Comparator接口来实现

代码以下

 

结果相同

至于为何要把Comparator的comparator做为参数传入TreeSet()构造器中,本人也是小白。我目前也不清楚

有人知道的话,能够说一下

 

分割线

----------------------------------

TreeSet(Comparator comparator)

构造一个空的树集合,它按照由comp指定的比较方法进行排序

相关文章
相关标签/搜索