Java基础之接口篇

Overload和Override的区别?重载Overload:表示同⼀个类中可以有多个名称相同的⽅法,但这些⽅法的参数列表各不相同,参

数个数或类型不同

重写Override:表示⼦类中的⽅法可以与⽗类中的某个⽅法的名称和参数完全相同

接⼝是否可以继承接⼝?接⼝是否⽀持多继承?类是否⽀持多继承?接⼝⾥⾯是否可以有⽅法实现

接⼝⾥可以有静态⽅法和⽅法体

接⼝中所有的⽅法必须是抽象⽅法(JDK8之后就不是)

接⼝不是被类继承了,⽽是要被类实现

接⼝⽀持多继承, 类不⽀持多个类继承

⼀个类只能继承⼀个类,但是能实现多个接⼝,接⼝能继承另⼀个接⼝,接⼝的继承使⽤extends关

键字,和类继承⼀样

是否了解JDK8⾥⾯接⼝新特性

interface中可以有static⽅法,但必须有⽅法实现体,该⽅法只属于该接⼝,接⼝名直接调⽤

该⽅法

接⼝中新增default关键字修饰的⽅法,default⽅法只能定义在接⼝中,可以在⼦类或⼦接⼝

中被重写default定义的⽅法必须有⽅法体

⽗接⼝的default⽅法如果在⼦接⼝或⼦类被重写,那么⼦接⼝实现对象、⼦类对象,调⽤该

⽅法,以重写为准

本类、接⼝如果没有重写⽗类(即接⼝)的default⽅法,则在调⽤default⽅法时,使⽤⽗类

(接⼝) 定义的default⽅法逻辑

抽象类(abstract class)和接口(interface)有什么异 同?
答:
抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如 果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实 现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中 可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其 中 的 方 法 全 部 都 是 抽 象 方 法 。抽 象 类 中 的 成 员 可 以 是 pr iv at e 、默 认 、pr ot e c te d 、 pu b li c 的 ,而 接 口 中 的 成 员 全 都 是 pu b li c 的 。抽 象 类 中 可 以 定 义 成 员 变 量 , 而 接 口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而 抽象类未必要有抽象方法。

参考《Java核心技术卷》

6.1.1 接口概念
在Java程序设计语言中,接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。
我们经常听到服务提供商这样说:”如果类遵从某个特定接口,那么就履行这项服务”。下面给出一个具体的示例。Arrays类中的sort方法承诺可以对对象数组进行排序,但要求满足下列前提:对象所属的类必须实现了Comparable接口。
下面是Comparable接口的代码:

这就是说,任何实现Comparable接口的类都需要包含compareTo方法,并且这个方法的参数必须是一个Object对象,返回一个整型数值。
注释:在Java SE 5.0中,Comparable接口已经改进为泛型类型。

例如,在实现Comparable接口的类中,必须提供下列方法

还可以使用不带类型参数的”原始”Comparable类型。这样一来,compareTo方法就有一个Object类型的参数,必须手动将compareTo方法的这个参数强制转换为所希望的类型。稍后我们就会做这个工作,所以不用担心同时出现两个新概念。
接口中的所有方法自动地属于public。因此,在接口中声明方法时,不必提供关键字public。
当然,接口中还有一个没有明确说明的附加要求:在调用x.compareTo(y)的时候,这个compareTo方法必须确实比较两个对象的内容,并返回比较的结果。当x小于y时,返回一个负数;当x等于y时,返回0;否则返回一个正数。
上面这个接口只有一个方法,而有些接口可能包含多个方法。稍后可以看到,在接口中还可以定义常量。然而,更为重要的是要知道接口不能提供哪些功能。接口绝不能含有实例域,在Java SE 8之前,也不能在接口中实现方法。(在6.1.4节和6.1.5节中可以看到,现在已经可以在接口中提供简单方法了。当然,这些方法不能引用实例域——接口没有实例。)
提供实例域和方法实现的任务应该由实现接口的那个类来完成。因此,可以将接口看成是没有实例域的抽象类。但是这两个概念还是有一定区别的,稍后将给出详细的解释。
现在,假设希望使用Arrays类的sort方法对Employee对象数组进行排序,Employee类就必须实现Comparable接口。
为了让类实现一个接口,通常需要下面两个步骤:
1)将类声明为实现给定的接口。
2)对接口中的所有方法进行定义。
要将类声明为实现某个接口,需要使用关键字implements:

当然,这里的Employee类需要提供compareTo方法。假设希望根据雇员的薪水进行比较。以下是compareTo方法的实现:

在这里,我们使用了静态Double.compare方法,如果第一个参数小于第二个参数,它会返回一个负值;如果二者相等则返回0;否则返回一个正值。
警告:在接口声明中,没有将compareTo方法声明为public,这是因为在接口中的所有方法都自动地是public。不过,在实现接口时,必须把方法声明为public;否则,编译器将认为这个方法的访问属性是包可见性,即类的默认访问属性,之后编译器就会给出试图提供更严格的访问权限的警告信息。
我们可以做得更好一些。可以为泛型Comparable接口提供一个类型参数。

请注意,对Object参数进行类型转换总是让人感觉不太顺眼,但现在已经不见了。
提示:Comparable接口中的compareTo方法将返回一个整型数值。如果两个对象不相等,则返回一个正值或者一个负值。在对两个整数域进行比较时,这点非常有用。例如,假设每个雇员都有一个唯一整数id,并希望根据ID对雇员进行重新排序,那么就可以返回id-other.id。如果第一个ID小于另一个ID,则返回一个负值;如果两个ID相等,则返回0;否则,返回一个正值。但有一点需要注意:整数的范围不能过大,以避免造成减法运算的溢出。如果能够确信ID为非负整数,或者它们的绝对值不会超过(Integer.MAX_VALUE-1)/2,就不会出现问题。否则,调用静态Integer.compare方法。
当然,这里的相减技巧不适用于浮点值。因为在salary和other.salary很接近但又不相等的时候,它们的差经过四舍五入后有可能变成0。x

如果a[i]不属于实现了Comparable接口的类,那么虚拟机就会抛出一个异常。
程序清单6-1给出了对一个Employee类(程序清单6-2)实例数组进行排序的完整代码,用于对一个员工数组排序。
程序清单6-1 interfaces/EmployeeSortTest.java

程序清单6-2 interfaces/Employee.java

java.lang.Comparable1.0
·int compareTo(Tother)
用这个对象与other进行比较。如果这个对象小于other则返回负值;如果相等则返回0;否则返回正值。
java.util.Arrays 1.2
·static void sort(Object[]a)
使用mergesort算法对数组a中的元素进行排序。要求数组中的元素必须属于实现了Comparable接口的类,并且元素之间必须是可比较的。
java.lang.Integer 1.0
·static int compare(int x,int y)7
如果x

Original: https://www.cnblogs.com/GeniusWang/p/16552885.html
Author: Genius_Wang
Title: Java基础之接口篇

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583122/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis 事务与锁

    基本操作 事务的基本操作 开启事务,设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中 multi 取消事务,终止当前事务的定义,发生在 multi 之后,exec 之…

    Linux 2023年5月28日
    0101
  • 2017年腾讯 秋招软件开发笔试编程题回忆版

    2017 年腾讯 秋招软件开发笔试编程题回忆版 (所有题目大致描述如下,并非完整的题目回忆,但意思大致一样) 1、又一个魔法城市,城市里面有n个魔法城堡,序号为0,1,2。。。n-…

    Linux 2023年6月6日
    0108
  • springBoot 获取注解参数的原理

    判断每个参数带有注解是哪个,是否存在相应的解析器 寻找合适的处理适配器 DispatcherServlet中的 doDispatch方法 // Determine handler …

    Linux 2023年6月7日
    0114
  • firewalld dbus接口使用指南

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    Linux 2023年5月27日
    0141
  • flask 之上传本地图片

    项目配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import os class Config(object): DEBUG = True SQLALCH…

    Linux 2023年6月8日
    0128
  • 致远 OA 组合 getshell

    测试版本为: 致远 A8-V5 协同管理软件 V6.1SP2 1.获取cookie信息 2….

    Linux 2023年5月28日
    0333
  • SpringBoot-swagger

    SpringBoot整合swagger SpringBoot-swagger 13.1 导入相关依赖 io.springfox springfox-swagger-ui 2.9.2…

    Linux 2023年6月14日
    0105
  • [转] OSDI, SOSP与美国著名计算机系的调查报告

    看到一个很久之前的文章,重新排版后转发一下,希望能带来一些帮助;文章有时效性,出现的数据多为历史数据。资源来源自网络,侵删。 序言 按照USnews的分类,Computer Sci…

    Linux 2023年6月13日
    0120
  • 理想汽车 x JuiceFS:从 Hadoop 到云原生的演进与思考

    理想汽车在 Hadoop 时代的技术架构 首先简单回顾下大数据技术的发展,基于我个人的理解,将大数据的发展分了4个时期: 第一个时期: 2006 年到 2008 年。2008 年左…

    Linux 2023年6月14日
    0117
  • Jq 手机端输入框防止底部菜单被小键盘弹起

    var winHeight = $(window).height(); //获取当前页面高度 $(window).resize(function () { var thisHeig…

    Linux 2023年6月7日
    0101
  • linux命令__ln

    ln ln是linux中又一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同步的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目…

    Linux 2023年6月7日
    0117
  • zabbix模板,角色,用户,权限管理

    用户管理 用户组 用户角色 用户 模板管理 模板组 模板 posted @2022-09-07 22:22 溜溜威 阅读(14 ) 评论() 编辑 Original: https:…

    Linux 2023年6月7日
    0109
  • 高等代数:5 矩阵的相抵与相似

    5 矩阵的相抵与相似 1、设S,M是两个集合,则集合 ({(a,b)|a \in S,b \in W}) 称为S与M的 笛卡儿积,记作:(S \times M)。 2、定义1:设S…

    Linux 2023年6月8日
    0151
  • 学习一下 SpringCloud (三)– 服务调用、负载均衡 Ribbon、OpenFeign

    (1) 相关博文地址: 学习一下 SpringCloud (一)– 从单体架构到微服务架构、代码拆分(maven 聚合): https://www.cnblogs.com/l-y…

    Linux 2023年6月11日
    0104
  • K8s-二进制安装

    K8S-二进制安装使用 1.IP总规划 服务类型 ip地址 组件 k8s-master01 etcd集群节点1 192.168.80.20 kube-apiserver、kube-…

    Linux 2023年6月13日
    0112
  • rsync

    rsync rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。 rsync…

    Linux 2023年6月7日
    0129
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球