你们口中的接口是什么

news/2024/12/21 22:05:49/

先从一个通俗的解释看起 (原文:C# 接口《通俗解释》)

如果你的工作是一个修水管的,一天客户找上你让你帮装水管,但是有个要求,就是客户喜欢管子是三角形的。

你立马买了三角形的水管回来,在墙上弄个三角形的口子,客户付了钱,你很开心今天有了收入
在这里插入图片描述
但是好景不长,客户过了一个星期又来找,因为他觉得三角形不好看,要让你换成正方形的水管,你不得不换,因为顾客就是上帝。好吧,继续在墙上弄个正方形的口子,然后又换成正方形的管子来接上。好了,如下图:(但是可能觉得为什么一开始不说要正方形的?因为需求总在变化。。。)
在这里插入图片描述
你累得满头大汗,但是还是完成了。可惜不久,客户又来找你,因为他想换成椭圆形的管子了。虽然你很无奈,但是你还是不得不花了几个小时完成。如下图:
在这里插入图片描述
安装完成,这时你可能在考虑,为什么换不同形状的水管,我都要大动干戈一番呢?于是你想到一个好方法,那就是墙上设计一个固定的水管并且是圆形的,当客户喜欢什么形状的水管,那么我只需要把客户喜欢的水管的一头做成圆形的,这样,以后都不需要去动墙上的水管了。这是一个好办法。就先在墙上弄个圆形的口,这个口就叫做接口。如下图:
在这里插入图片描述
如你所见,墙上有个圆形的口,但是按照原本的:

三角形水管两端是三角形
正方形水管两端是正方形
椭圆形水管两端是椭圆形

那是肯定接不上的,因为三角形、正方形、椭圆形的口怎么和墙壁上圆形的口对接呢?

所以先要实现接口,把:

三角形水管一端做成圆形
正方形水管一端做成圆形
椭圆形水管一端做成圆形

如图,所以,圆形接口做出来了,具体实现是客户去安装,接口本身并不会安装其他形状的水管,换句话说就是接口没有具体实现,只是告诉你,你的水管要接入,必须有一端是圆形的(接口的约束),因为我只留这个圆形的接口,你要装别的形状的管子,先把一个弄成圆形的就好了(子类去实现接口的方法),不管什么形状,都要一个必须做成圆形才能对接得上,它必须要你按照我的规范来做。这就是为什么新手会觉得接口什么都不做,只定义接口,没有任何实现,那不是多此一举吗?因为它的实现是子类去完成。这样只要客户喜欢什么形状的水管,只要实现了我的接口(圆形),都能对接得上,而且改变起来也很方便,只要把水管扭上去就行了,不用在去给墙壁挖洞了。
接口的语法实现
为了声明一个接口,我们使用interface这个关键字,在接口中的所有方法都必须只声明方法标识,而不要去声明具体的方法体,因为具体的方法体的实现是由继承该接口的类来去实现的,因此,接口并不用管具体的实现。接口中的属性默认为Public Static Final.一个类实现这个接口必须实现这个接口中定义的所有的抽象方法。

一个简单的接口就像这样:拥有全局变量和抽象方法

在这里插入图片描述
为了实现这个接口,我们使用implements关键词去实现接口在这里插入图片描述
其中testClass类实现了我们上面刚才定义的 in1 这个接口,既然你要实现接口,也就是实现接口代表的一种能力,那么你就必须去实现接口给你规定的方法,只有把接口给你规定的抽象方法都给实现了,才承认你这个类实现了这个接口,实现了这个接口代表的某种功能。上图实现了接口中规定的display()方法。
在这里插入图片描述
写一个测试类,用来测试一下我们刚才实现的这个接口,因为testclass类的对象t实现了接口规定的display方法,那么自然而然就可以调用display()方法咯。
在这里插入图片描述
接口的进一步理解
我们知道,如果某个设备需要向电脑中读取或者写入某些东西,这些设备一般都是采用USB方式与电脑连接的,我们发现,只要带有USB功能的设备就可以插入电脑中使用了,那么我们可以认为USB就是一种功能,这种功能能够做出很多的事情(实现很多的方法),其实USB就可以看做是一种标准,一种接口,只要实现了USB标准的设备我就认为你已经拥有了USB这种功能。(因为你实现了我USB标准中规定的方法),下面是具体的例子:

先声明USB接口:其中规定了要实现USB接口就必须实现接口规定实现的read( )和write( )这两个方法

interface USB {void read();void write();
}

然后在写一个U盘类和一个键盘类,这两个类都去实现USB接口。(实现其中的方法)

class YouPan implements USB {@Overridepublic void read() {System.out.println("U盘正在通过USB功能读取数据");}@Overridepublic void write() {System.out.println("U盘正在通过USB功能写入数据");}
}
这是U盘的具体实现。

class JianPan implements USB {
@Override
public void read() {
System.out.println(“键盘正在通过USB功能读取数据”);
}
@Override
public void write() {
System.out.println(“键盘正在通过USB功能写入数据”);
}
}
这是键盘的具体实现。

  那么,现在U盘和键盘都实现了USB功能,也就是说U盘和键盘都能够调用USB接口中规定的方法,并且他们实现的方式都不一样。我们在写一个测试,来看看具体的实现:

public class Main {
public static void main(String[] args) {
//生成一个实现可USB接口(标准)的U盘对象
YouPan youPan = new YouPan();
//调用U盘的read( )方法读取数据
youPan.read();
//调用U盘的write( )方法写入数据
youPan.write();
//生成一个实现可USB接口(标准)的键盘对象
JianPan jianPan = new JianPan();
//调用键盘的read( )方法读取数据
jianPan.read();
//调用键盘的write( )方法写入数据
jianPan.write();
}
}

结果如下:
在这里插入图片描述
关于接口的几个重点
我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的,这样怎么可能产生具体的实例呢?但是,我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法。因此,上图中最后的方法调用我们还可以这样写:(实际上就是使用了Java中多态的特性)

public class Main {public static void main(String[] args) {//生成一个实现可USB接口(标准)的U盘对象//但是使用一个接口引用指向对象//USB接口类引用可以指向一个实现了USB接口的对象USB youPan = new YouPan();//调用U盘的read( )方法读取数据youPan.read();//调用U盘的write( )方法写入数据youPan.write();//生成一个实现可USB接口(标准)的键盘对象//但是使用一个接口引用指向对象//USB接口类引用可以指向一个实现了USB接口的对象USB jianPan = new JianPan();//调用键盘的read( )方法读取数据jianPan.read();//调用键盘的write( )方法写入数据jianPan.write();}
}                                             2.一个类可以实现不止一个接口。3.一个接口可以继承于另一个接口,或者另一些接口,接口也可以继承,并且可以多继承。4.一个类如果要实现某个接口的话,那么它必须要实现这个接口中的所有方法。5.接口中所有的方法都是抽象的和public的,所有的属性都是public,static,final的。6.接口用来弥补类无法实现多继承的局限。7.接口也可以用来实现解耦。

http://www.ppmy.cn/news/768106.html

相关文章

utf-8中一个汉字是3个字节,你知道吗?

问题导入: 今天学习了mysql中的函数,length(字符串),计算字符串长度函数,返回字符串的字节长度。 select length(‘abc’); 查询的结果是3。 select length(‘中国’); 查询的结果是6。 第二个查询为什么是6&#xff0…

并行I/O 接口、8255A控制字与初始化编程、工作方式与时序

文章目录 第十章 并行I/O 接口一、可编程并行I/O接口芯片8255A的内部结构及引脚端口地址方式0:基本型输入/输出方式,ABC口都适用方式1:选通型输入/输出方式:查询方式或中断方式,只有AB口可以作为联络信号方式2:双向数据传送方式二、8255A控制字与初始化编程8255的两个控制…

日本的出前一丁是什么意思啊

出 前 一 丁 外卖一份 这个牌子的泡面大家一定不陌生吧 小时候你是不是也一头雾水 出前一丁? 是吃之前“叮”一下吗 问了身边的朋友 都以为是日本有个人叫出前一丁 其实他的意思是 外卖一份 出前(でまえ) demae 外卖 いっちょう icchyou 一份…

什么是口子查?

口子查是什么?今天我就给大家分享一些关于国外问卷调查口子查这方面的干货。口子查是不同于站点查跟渠道查,不仅付款方式不同,题目出现的方式也不同。 一般一家公司想要做一份调查的话,通常会有两个选择:选择一&#…

或是独体字吗_独体字结构 独体结构的字有哪些字?

相关解答一:独体结构字 独体结构字是针对字的结构而言的,独体字的构成大致有三种情况:(1)由基本笔画构成一个部件独立成字的。如:“一、乙”(1画),“人、几”(2画),“口,山”(3画),“…

接口(上)

🐷1.接口的概念 🐱‍🚀2.接口的语法规则 💚3.接口的使用 🚀4.接口的特性 🎆5.实现多个接口 🐶6.接口间的继承 🎊7.接口使用的实例 1.什么是接口呢??&a…

IO 口的位操作实现

一、概念 该部分代码在 sys.h 文件中,实现对 STM32 各个 IO 口的位操作,包括读入和输出。当然在这些函数调用之前,必须先进行 IO 口时钟的使能和 IO 口功能定义。此部分仅仅对 IO 口进 行输入输出读取和控制。 位带操作简单的说&…

Vite按需引入自定义组件unplugin-vue-components

1.安装插件 npm i unplugin-vue-components -D 2.vite.config.ts文件加如下代码 plugins: [vue({reactivityTransform: true}),Components({extensions: [vue, md],include: [/\.vue$/, /\.vue\?vue/, /\.md$/],dts: src/components.d.ts,deep: true, // 搜索子目录dirs: [s…