接口(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()构造器中,本人也是小白。我目前也不清楚

有人知道的话,可以说一下

分割线

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

TreeSet(Comparator comparator)

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

转载于:https://www.cnblogs.com/littlelittleprince/p/9225663.html

接口(Interface)的深入理解相关推荐

  1. go struct 静态函数_Go语言学习笔记(四)结构体struct 接口Interface 反射reflect...

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...

  2. TypeScript 接口(Interface)

    TypeScript 接口(Interface) 本节介绍 TypeScript 各种类型接口的声明及其使用方法,接口在 TypeScript 中是极其重要的,我们使用接口来定义契约,如类型命名.属性 ...

  3. C#接口(Interface)小结(超详细,你值得拥有!!!)

    前言:通过阅读本篇文章能够深入的理解C#中的接口以及接口的实现,推荐刚入门的小伙伴收藏嗷!!! 目录: 一.接口的概念 二.接口的作用 三.接口的特性 四.接口的声明 五.接口的两种实现方式 1.隐式 ...

  4. 12-Go语言接口interface

    接口 在Go语言中接口(interface)是一种类型,一种抽象的类型.相较于之前章节讲到的那些具体类型,接口更注重"我能做什么的问题".接口类型就像是一种约定–概括了一种类型应具 ...

  5. System Verilog学习笔记—接口interface

    目录 0.interface的直观理解 1.使用端口的TB与DUT通信 2.使用接口的TB与DUT通信 3.使用modport将interface中的信号分组 4.接口中的clocking block ...

  6. java 接口对象_Java面向对象之接口——interface

    Java面向对象之接口--interface 什么是接口 一般计算机中的接口分为硬件接口和软件接口. 硬件接口:是指两个硬件设备之间的连接方式,既包括物理上的接口,还包括逻辑上的数据传送协议. 软件接 ...

  7. Go 学习笔记(35)— Go 接口 interface (接口声明、接口初始化、接口方法调用、接口运算、类型断言、类型查询、空接口)

    1. 接口概念 接口是双方约定的一种合作协议.接口实现者不需要关心接口会被怎样使用,调用者也不需要关心接口的实现细节.接口是一种类型,也是一种抽象结构,不会暴露所含数据的格式.类型及结构. 接口内部存 ...

  8. php中的抽象类(abstract class)和接口(interface)

    一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...

  9. Java接口interface

    Java接口interface 1.多个无关的类可以实现同一个接口. 2.一个类可以实现多个无关的接口. 3.与继承关系类似,接口与实现类之间存在多态性. 接口(interface)是抽象方法和常量值 ...

最新文章

  1. Linux :debian(ubuntu)下安装和使用haskell
  2. 实现迷你解析器把字符串解析成NestInteger类 Mini Parser
  3. 关于在Windows Mobile下今日插件使用WTL的问题
  4. WPF--动态添加控件、访问控件
  5. 微信小程序源码下载链接
  6. 求5阶矩阵其对角线上所有元素之和
  7. java map put报错_java 集合(Map)
  8. 日志打印工具类LogUtils
  9. c语言如何输入未知数据类型的_C语言新手踩坑记!大坑小坑全部都是你的!
  10. Microsoft.mshtml.dll 添加引用及类型选择错误问题解决办法
  11. java复制文件到指定目录
  12. 关于web中的字体, .woff, .eot, .svg
  13. ActiveX控件原理及手动修改
  14. pdf转cad怎么弄_CAD转PDF怎么弄?在线老师傅教你一招
  15. java学生奖学金管理系统_java毕业设计_springboot框架的高校学生奖学金评定系统...
  16. css3实现3d图片旋转效果
  17. 房地产类软件实战教程,如何写好房地产类软文
  18. 2020Java后端开发面试题总结(春招+秋招+社招)
  19. 首次提交代码至github(转载)
  20. 华为鸿蒙太空人壁纸,华为太空人动态壁纸下载-华为太空人动态壁纸图片高清版-丫丫安卓网...

热门文章

  1. GitHub也会断供:美国制裁地区帐号都受限,毫无预警,个人页面直接404
  2. 20项任务横扫BERT!CMU谷歌发布XLNet,NLP再迎屠榜时刻
  3. Asynchronous CDI Events
  4. 构建多域名Exchange 2010邮件系统
  5. LR学习笔记三 之 界面分析
  6. java disruptor压测_Java并发框架Disruptor实现原理与源码分析(二) 缓存行填充与CAS操作...
  7. python3 上传文件到目标机器_再见Python 2.7,你好Python 3.7
  8. NetDevOps — YANG 协议
  9. Tungsten Fabric SDN — 与 OpenStack 的集成部署
  10. 工业互联网 — Overview