ToB企服应用市场:ToB评测及商务社交产业平台

标题: 假面与演员:到底是接口在使用类,还是类在使用接口?编程接口与物理接口的 [打印本页]

作者: 飞不高    时间: 2025-2-18 20:24
标题: 假面与演员:到底是接口在使用类,还是类在使用接口?编程接口与物理接口的
媒介:本篇文章解释了接口学习过程中的2个常见题目,一个是“为什么是类在使用接口”,另一个一个是“编程接口与物理接口的差异源于所处的抽象条理和交互模式的差别”,旨在展现编程接口的本质。
  Part1.是类在使用接口

当学习接口时,许多人都会告诉你“是类在使用接口”。但是我们观察接口的运用方式,会发现我们常常是用接口类型的变量来吸收类的实例,并使用类中的具体方法。这不禁让我们产生疑问:到底是接口在使用类,还是类在使用接口?
先说结论:“是类在使用接口”,而不是接口在使用类。下面由我来为各人展现控制反转的微妙之处。
一. 表象:为什么“看起来像接口在使用类”?

1. 代码的直观表现
当用接口类型的变量调用方法时,代码的书写情势确实像是“接口在操作类”:
  1. // 接口类型变量
  2. Flyable obj = new Bird();
  3. obj.fly(); // 看似接口调用了 Bird 的方法
复制代码
这里 Flyable 类型的变量 obj 调用了 fly() 方法,而实际执行的是 Bird 类的实现。这种写法轻易让人产生“接口自动使用类”的错觉。
2. 直觉误区来源


二. 本质:假面与演员。。

1. 接口是“面具”,类是“演员”
接口类型的变量更像是一个脚色标签。它不关心背后具体是哪个类,只关心这个类是否“戴上了面具”(实现了接口)。观众们(我们)看到并记着的是这个假面(接口),真正在演出的是演员(类)。
真正的执行者是类自身的方法:
  1. // 逻辑拆解:
  2. Flyable obj = new Bird();  // 类主动“戴上面具”(实现接口)
  3. obj.fly();                // 面具下的演员(Bird)在表演
复制代码
2. 接口的“被动性”
在运行时,JVM/编译器会根据对象实际类型调用对应方法,与接口无关。
接口没有能力“自动使用”任何类,它只是:


三. 纠正头脑:重新理解自动权!

1. 类才是行为的拥有者
   接口只是强制类公开某些能力,但能力的具体实现完全由类决定。
  例如:
  1. interface Weapon {
  2.     void attack();
  3. }
  4. class Sword implements Weapon {
  5.     public void attack() { System.out.println("挥剑"); } // 类的主动性
  6. }
  7. class Gun implements Weapon {
  8.     public void attack() { System.out.println("开枪"); } // 类的主动性
  9. }
复制代码
无论是 Sword 还是 Gun,它们的 attack() 逻辑由类自身界说,接口无法干预。
当通过接口调用方法时,本质是其他代码(如调用方)通过接口的抽象层间接使用类,而非接口本身在操作类。例如:
  1. // 一个外部系统通过接口调用类
  2. class GameEngine {
  3.     void useWeapon(Weapon weapon) {
  4.         weapon.attack(); // 实际调用 Sword.attack() 或 Gun.attack()
  5.     }
  6. }
复制代码
  这里 GameEngine 是自动调用者,接口只是通报调用的媒介。
  2. 生存类比修正
假设你是一个餐厅老板,你界说了一份“厨师岗位职责”(接口):职责要求:会做菜、会干净厨房。
具体的厨师 (类):张三、李四各自以自己的方式实现这些职责。
当顾客点菜时,他们通过“厨师岗位”这个抽象概念获得服务,但实际做菜的是张三或李四。岗位职责(接口)没有能力做菜,它只是确保张三李四具备做菜能力

四、总结

   你的狐疑展现了编程中“控制反转”的微妙之处:
  
  这种反直觉的计划恰好是面向对象编程的威力所在——通过抽象层解耦调用方和实现方,让系统更机动。理解这一点后,你会意识到:不是接口在使用类,而是类通过接口向 外界 宣告“我能做什么”

Part2. 编程接口与物理接口的区别

关于接口的知识,我们大概另有一些疑惑之处:
在java中,类假如实现了接口,那么接口类型的变量就可以操控对象的函数执行,感觉像是接口和对象在互动,一共有两个脚色;而物理上的接口,比如可以用鼠标操控电脑,这就感觉是对象1与对象2在互动,它们之间的USB接口是互动的桥梁,这之中一共有三个脚色
为什么我们看到的只有接口和对象在互动?编程接口与物理接口的区别又是什么?
一、两者模式?三者模式!

接口作为规范,束缚了对象必须提供哪些方法,但不参与实际交互过程。动态绑定机制隐藏了接口的被动性,让你感觉是接口和对象在“互动”的两者模式,但实际是对象在自动向外界提供服务
   在编程中,完整的交互确实涉及三个脚色,它们分别是对象、接口、外界。此中外界既可以是我们这种调用者,也可以是其他调用该方法的代码
  以刚刚“生存类比修正”的比喻为例,编程接口就相当于一张岗位招聘,类就相当于具体的厨师,食客就是此处的外界。厨师按照招聘要求前来工作,做好菜品给食客品尝也展示了自己的实力。
三者的交互逻辑:(编程接口)
交互流程图:
  
  1. <strong>外界(调用方)</strong> —— 通过<strong>接口</strong> ——→ <strong>对象</strong>
  2.          ↑                     ↓
  3.          ←— — 实际执行结果 ——  ←—
复制代码

二、核心区别

我们再来看一下物理接口的三者模式:

编程接口和物理接口都有束缚的作用,为什么只有物理接口有信息传输的职责?(编程接口与物理接口的核心区别):
1. 抽象条理的分离


2. 交互复杂性的需求


3. 计划目标的差异




“用接口类型变量调用方法”的本质是:类通过接口向外界提供服务,而调用方通过接口的抽象层使用这些服务。接口是被动的束缚者,类才是自动的提供者(调用者是外界)。 这种计划让代码更机动,但抽象层带来的“间接性”会让人产生方向混淆——这是学习抽象头脑的必经之路,而非认知障碍。
让我们在学习编程的道路上继承成长吧!本期分享完毕,感谢各人的支持Thanks♪(・ω・)ノ


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4