我从互联网上找到了以下定义,两者听起来与我相似:
抽象:抽象是OOPS的另一个好特征。抽象意味着仅向对象的客户端显示必要的细节。你知道你的电脑显示器的内部细节吗?打开显示器时会发生什么?这对监视器内部发生的事情有影响吗?没有权利,对你来说重要的是天气监视器是开还是不开启。当您更换车辆的档位时,您是否真的关注车辆发动机的内部细节?不,但对你来说重要的是Gear必须改变它就是它!这是抽象;仅显示对用户重要的细节。 假设你有一个方法" CalculateSalary"在Employee类中,它将EmployeeId作为参数,并将当前月份的员工薪水作为整数值返回。现在,如果有人想要使用该方法。他不需要关心Employee对象如何计算薪水?他唯一需要关注的是方法的名称,输入参数和结果成员的格式,对吧? 因此抽象说只暴露与对象的用户(客户端)有关的细节。所以使用你的课程的客户不需要知道你的班级如何进行操作的内部细节?他只需知道一些细节。这当然有助于代码的可重用性。
接口:接口是对象可以执行的操作的描述...例如,当您打开灯开关时,指示灯亮起,您不关心它是怎么做的。在面向对象编程中,接口是对象必须具有的所有函数的描述,以便成为" X"。再一次,作为一个例子,任何" ACTS LIKE"一个灯,应该有turn_on()方法和turn_off()方法。接口的目的是允许计算机强制执行这些属性并知道TYPE T的对象(无论接口是什么)必须具有称为X,Y,Z等的函数。
面向对象编程语言中的接口
接口是一种编程结构/语法,允许计算机在对象(类)上强制执行某些属性。例如,假设我们有一个汽车类,一个踏板车类和一个卡车类。这三个类中的每一个都应该有一个start_engine()动作。 "引擎如何启动"每个车辆都留给每个特定的类,但它们必须有一个start_engine动作的事实是接口的域。
这两种解释都没有说同样的话吗?它们是相同还是不同?
答案 0 :(得分:2)
界面告诉您您可以用某些东西做什么。摘要(离子)可能还告诉你 你做了些什么。因此,接口总是一种抽象,但抽象可以携带比接口更多的信息。
在C ++世界中,与...不同Java,没有明确的接口声明;相反,您的类自动提供基类提供的所有接口。我们中的一些人倾向于只使用纯虚方法(可能还有非纯虚析构函数)和接口来调用类。请注意,严格来说,它并不是指定接口的唯一方法,新的/即将推出的C ++功能(如Concepts)可能会改变这一场景。类似地,我们通常说当一个类至少有一个纯虚方法时它是抽象的,虽然当你使用基于模板/特征的组合和实现和接口而不是虚拟和继承时,可能会有不同的定义。
答案 1 :(得分:2)
如果你愿意的话,抽象就是从细节上移开,然后“缩小”。您倾向于通过创建结构来展示代码来从实现中抽象出来。作为一个例子,你可以抽象思考整个人,或者更进一步思考一群人,而不是根据身体中的个体细胞进行思考。
界面就是这样;你如何与你的代码接口。这通常在您的类中以public
函数的形式出现,但不一定如此。理想情况下,界面应描述某些内容可以做什么,而不受其如何影响。例如,你可能有一个让人走路的功能,但没有一个人可以移动他们的肌肉。
答案 2 :(得分:0)
在C ++函数的上下文中:
界面 描述了如何使用功能原型所使用的功能。
调用该函数的客户端不必担心函数是如何实现的(即它是如何实现的)。简而言之,您有一层 抽象 。