• Java基础之接口


    接口的本质

    在之前的章节中,我们一直在强调数据类型的概念,但只是将对象看作属于某种数据类型,并按该类型进行操作,在一些情况下,并不能反映对象以及对对象操作的本质。

    为什么这么说呢

    很多时候,我们实际上关心的,并不是对象的类型,而是对象的能力,只要能提供这个能力,类型并不重要。我们来看一些生活中的例子。

    比如要拍照,很多时候,只要能拍出符合需求的照片就行,至于是用手机拍,还是用Pad拍,或者是用单反相机拍,并不重要,即关心的是对象是否有拍出照片的能力,而并不关心对象到底是什么类型,手机、Pad或单反相机都可以。

    又如要计算一组数字,只要能计算出正确结果即可,至于是由人心算,用算盘算,用计算器算,用计算机软件算,并不重要,即关心的是对象是否有计算的能力,而并不关心对象到底是算盘还是计算器。
    再如要将冷水加热,只要能得到热水即可,至于是用电磁炉加热,用燃气灶加热,还是用电热水壶加热,并不重要,即重要的是对象是否有加热水的能力,而并不关心对象到底是什么类型。

    在这些情况中,类型并不重要,重要的是能力。 那如何表示能力呢?接口。下面就来详细介绍接口,包括其概念、用法、一些细节,以及如何用接口替代继承。

    接口的概念

    接口这个概念在生活中并不陌生,电子世界中一个常见的接口就是USB接口。计算机往往有多个USB接口,可以插各种USB设备,如键盘、鼠标、U盘、摄像头、手机等。

    接口声明了一组能力,但它自己并没有实现这个能力,它只是一个约定。接口涉及交互两方对象,一方需要实现这个接口,另一方使用这个接口,但双方对象并不直接互相依赖,它们只是通过接口间接交互,上面的USB接口来说,USB协议约定了USB设备需要实现的能力,每个USB设备都需要实现这些能力,计算机使用USB协议与USB设备交互,计算机和USB设备互不依赖,但可以通过USB接口相互交互。下面我们来看Java中的接口。

    定义接口

    我们通过一个例子来说明Java中接口的概念。这个例子是“比较”,很多对象都可以比较,对于求最大值、求最小值、排序的程序而言,它们其实并不关心对象的类型是什么,只要对象可以比较就可以了,或者说,它们关心的是对象有没有可比较的能力。Java API中提供了Comparable接口,以表示可比较的能力,但它使用了泛型,而我们还没有介绍泛型,所以本节先自己定义一个Comparable接口,叫MyComparable。

    首先来定义这个接口,代码如下:

    public interface MyComparable {
        int compareTo(Object other);
    }

    定义接口的代码解释如下:

    1)Java使用interface这个关键字来声明接口,修饰符一般都是public。

    2)interface后面就是接口的名字MyComparable。

    3)接口定义里面,声明了一个方法compareTo,但没有定义方法体,Java 8之前,接口内不能实现方法。接口方法不需要加修饰符,加与不加相当于都是public abstract。

    再来解释compareTo方法:

    1)方法的参数是一个Object类型的变量other,表示另一个参与比较的对象。

    2)第一个参与比较的对象是自己。

    3)返回结果是int类型,-1表示自己小于参数对象,0表示相同,1表示大于参数对象。

    接口与类不同,它的方法没有实现代码。定义一个接口本身并没有做什么,也没有太大的用处,它还需要至少两个参与者:一个需要实现接口,另一个使用接口。我们先来实现接口。

    想要了解更多Java基础知识,点击下方链接和小编一起学习java吧,此视频教程为初学者而著,零基础入门篇!

    https://www.bilibili.com/video/BV1e24y1R7n9/?spm_id_from=333.999.0.0&vd_source=a7816e3b2a3a67ac39dc87f6bf92421cicon-default.png?t=M85Bhttps://www.bilibili.com/video/BV1e24y1R7n9/?spm_id_from=333.999.0.0&vd_source=a7816e3b2a3a67ac39dc87f6bf92421c

  • 相关阅读:
    RGB格式
    使用C语言进行问题分析
    阿里面试官:给我描述一下缓存击穿的现象,并说说你的解决思路?
    Django之视图层
    【cmake】利用cmake的add_subdirectory管理内部和外部库
    IOS课程笔记[4-5] 计算器实现与更换主题 的使用
    Leu-Trp-Leu-COOH,42293-99-2
    关于Python中math 和 decimal 模块的解析与实践
    css中5种属性选择器
    dice loss
  • 原文地址:https://blog.csdn.net/m0_72882572/article/details/127125713