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)

大家都在看

  • 标签泄露 Label leaking

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    093
  • Mybatis源码解读-插件

    注册 xml方式的注册,是在XMLConfigBuilder#pluginElement完成的。 不明觉厉的同学,请参考上一篇文章:Mybatis源码解读-配置加载和Mapper的…

    Linux 2023年6月7日
    099
  • 运维故障收集-考勤机无法连接考勤机网关系统故障验证流程

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/linuxshare/p/16474967.htmlAu…

    Linux 2023年6月6日
    097
  • 计算机系统领域学术会议论文评审流程

    今天看到海波老师的一张图,进行转载一下,下图记录了SOSP, OSDI, Eurosys 等计算机系统顶会的评审流程: 保持更新;cnblogs.com/xuyaowen。 Ori…

    Linux 2023年6月14日
    087
  • ASP.NET CORE在docker中的健康检查(healthcheck)

    在使用docker-compose的过程中,很多程序都提供了健康检查(healthcheck)的方法,通过健康检查,应用程序能够在确保其依赖的程序都已经启动的前提下启动,减少各种错…

    Linux 2023年6月6日
    0116
  • Linux 下统计文件夹下文件的数量

    1、查看当前目录下的文件数量(不包含子目录中的文件) 2、查看当前目录下的文件数量(包含子目录中的文件) 3、 查看当前目录下的文件夹目录个数(不包含子目录中的目录),同上述理,如…

    Linux 2023年6月13日
    0104
  • MySQL 新增表分区很慢,转移大表数据

    问题: MySQL (version 5.7.26) 数据库有一批表 xxx_yyy,由于评估的数据量可能比较大,因此每张表都设置了表分区,把每个月的数据保存在单独的分区里。 那么…

    Linux 2023年6月14日
    0100
  • 【抄】Shell正则表达式

    shell 正则语法基础 copy from: https://man.linuxde.net/docs/shell_regex.html 正则表达式的分类 基本的正则表达式(Ba…

    Linux 2023年5月28日
    0112
  • VMware ESXi 7.0 U2 SLIC 2.6 & Unlocker 集成 Intel NUC 网卡、USB 网卡和 NVMe 驱动

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

    Linux 2023年5月27日
    098
  • ABCD四个顺序执行方法,拓展性延申

    今天在群里,有人问 有几个void返回值&amp…

    Linux 2023年6月7日
    0126
  • Workshop与会议形式的分类

    在计算机科研工作阅读的过程中,我们经常遇到workshop和conference等关键词,通过这些关键词我们可以一定程度上了解文章的水平,从而方便自己的学习,下面记录了一些我从网络…

    Linux 2023年6月14日
    0185
  • tcpip详解-读书笔记

    TCP/IP详解 卷一 第一版读书笔记 第一章: 应用层关心是应用程序的细节,而不是数据在网络中对的传输活动,下三层对应用程序一无所知,但他们要处理所有的通信细节。 七层代理可以根…

    Linux 2023年6月13日
    0101
  • 搭建dashboard 出现浏览器无法访问

    搭建dashboard 出现浏览器无法访问 解决办法参考:https://www.gl.sh.cn/2020/11/05/jie_jue_k8s_dashboard_qi_ta_l…

    Linux 2023年6月14日
    0129
  • find 查询命令 & 正则表达式

    今日内容 find 正则表达式 Linux 三剑客之 grep 内容详细 一、find 按名称或属性查询文件 按名称查询 find [查找目录] [参数] [] 通配符 : * 表…

    Linux 2023年5月27日
    0102
  • shell 下载aliplayer 的视频

    #!/bin/bash url="http://v.example.com/8dedaec32ca9415eaa8ccd423ee33bf3/" #下载视频索引…

    Linux 2023年5月28日
    0104
  • js之数据类型(1)

    可以返回number,string,Boolean,object,undefined,function 运行结果如下: 注意如下几个数据类型的输出 显示数据类型转换和隐式数据类型转…

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