“你好,阿米戈!今天,我要告诉你接口存在的原因。你经常会听到某个类、对象或实体支持特定接口。那么支持接口是什么意思呢?”

存在支持特定行为的接口 - 1

广义上说,任何接口都是一种事物与另一种事物交互所用的机制。例如,电视遥控器就是一个远程接口。狗可以理解并执行命令,这意味着该狗支持语音(控制)接口。综上所述,我们可以说接口是两种事物进行交互的标准方式,前提是双方都知道这个标准。当一个人命令狗“坐下”时,他或她的命令是“狗语音控制接口”的一部分,如果狗听从该命令,那么我们就说狗支持该接口。

在编程中也是如此。方法是对对象及其数据执行的操作。如果一个类实现某些方法,那么它“支持某些命令的执行”。将方法组合成接口的好处是什么呢?

1)每个接口就像一个类,都有唯一的名称。双方都可以百分百肯定对方支持他们知道的确切接口,而不是某些相似的接口。

2)每个接口对要支持它的类都施加了某些限制。类(其开发人员)决定在调用从接口继承的方法时将执行的操作,但结果应在合理预期的范围内。如果我们命令狗“坐下”,它在原地滚动 5 分钟,然后坐下,那么它就支持该接口。但是,如果它抓住了您的脚,那么我们很难说它支持该接口。执行命令没有产生预期的结果。

假设你和朋友正在编写计算机游戏。你的任务是编写一个角色的行为。您的一位同事已经编写了代码,可以在屏幕上显示所有字符。第二位负责将游戏保存到磁盘的同事已经编写了将所有游戏对象保存到文件的代码。他们每个人都编写了很多代码,并制作了一个与该代码进行交互的接口。例如,它可能看起来像这样:

Java 语言代码 说明
interface Saveable
{
 void saveToMap(Map<String, Object> map);
 void loadFromMap(Map<String, Object> map);
}
— 用于从地图存储/加载对象的接口。
interface Drawable
{
 void draw(Screen screen);
}
—用于在传递的 Screen 对象内绘制对象的接口。
class PacMan implements Saveable, Drawable
{
…
}
—你的类支持两个接口。

换句话说,要支持任何接口(接口组),你的类必须:

1)继承它们

2)实现其中声明的方法

3)方法必须执行预期的工作。

然后,程序的其余代码(对你的类及其对象一无所知)可以与你的类一起使用。

“为什么代码对我的类一无所知?”

“假设你从某人一年前编写的程序中获取了代码。或者假设你朋友从别人那里购买/授权了游戏引擎。你有游戏的工作代码。数千个交互的对象。只要通过你的类已成功实现的接口,它们就能轻地与你的对象互动

“好奇怪!我以前都不知道这个。”

“所有大项目都是这么做的。人们已经很久不从零开始编写代码了。”

就像字母和数字,还需要重新发明么?大家都在学习现成的事物。