首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective-C中抽象类与接口的区别

Objective-C中抽象类与接口的区别
EN

Stack Overflow用户
提问于 2015-02-26 01:53:07
回答 2查看 14.7K关注 0票数 18

在iOS开发人员面试中最常被问到的问题之一是-抽象类和接口之间的区别。

我不知道答案,我也不明白。当你声明方法时,接口是类的一部分。它可以对其他类(公共的、.h文件)开放,也可以在实现中隐藏。

抽象类是一个类,它只用于创建隐藏子类,它不应该有自己的init方法(如果我理解正确的话)。

那么,这个问题的答案到底是什么呢?这个问题是什么意思?

我确实花了时间寻找答案,但答案与Obj-C无关,所以我无法自己找出答案。

我希望有人能给出明确的答案,这个问题会对那些想通过面试的人有所帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-26 03:28:31

解决这个问题的一个好方法是首先在一般的编程理论中考虑它,然后在更具体的Objective-C上下文中考虑它。

抽象类-是一个纯粹用于子类化的类,不能实例化它。抽象类声明了一些东西,也有它的实现。

为什么要有这样一个特殊的课程呢?它是模仿现实生活的!:)想象一个抽象的东西--一种动物。每种动物的有什么共同之处?它们都是alive (并且可以死亡)。他们需要吃可以在太空中移动吗?这些特征是所有动物的共同特征和基本特征()。我从来没有听说过一种动物不需要食物,不能移动,而且永远活着。除此之外,在不同的动物之间有很多不是很基本的差异。

地球上没有动物,它是,纯粹是一个抽象的动物。这一组基本的行为和特征根本不足以成为一种具体的动物。有一个隐含的原则,那就是要成为一种具体的动物,除了那些基本的特征之外,你还必须有一些额外的特征。

现在,在编程中,我们需要能够以某种方式

界面表达了这些基本原理(interface declaration)

  • have,一种描述它们如何工作的方式)到一种任何具体的动物都会拥有它们的接口(

我们知道这些基本原理是什么(声明的公共接口),我们知道在实践中它们是如何具体表现出来的(这些声明的特征的实现)。我们希望它们被所有具体的实体所继承。所以我们在抽象类中这样做,因为它满足了我提到的这些条件。它包含所有的基础,有它们的实现,但不能自己实例化。

抽象类是对一组相关实体的抽象,它捕获了所有实体之间的根本共同点。告诉我们它是如何确保所有更具体的实体都将继承它的done..and。

接口-是一个更小的东西。让我们来个现实生活中的类比。人,机器人,动物,风(自然力)。有些人会唱。机器人嵌入了语音合成器模块,因此它可以。秋风吹过我的玻璃,“唱”了许多我可以告诉你的话。而丁卡(r.i.p)我的狗,实际上也是一个很好的歌手。

但实际上,这四个人之间的“唱歌”只有一个共同点--你可以在你的耳朵里听到令人愉悦的声音。这四个人的演唱是如何发生的,在现实中有很大的不同,。(实现)

另一个复杂的问题是,当然不是所有的人、狗、风或动物都会唱歌。他们中的一些可以。

那么我们如何在编程中反映这种情况呢?通过接口:)

你可以有一个名为"SingInterface"的接口,在我们的例子中,它声明了一个行为/特征/功能,它是sing。接口只是声明了一些东西,仅此而已。接口没有说明某些事情是如何完成的,没有具体的实现。它也没有说明谁可以做到这一点,接口中的特征实际上并不局限于一种类型或一个类。(参见http://www.nasa.gov/centers/goddard/universe/black_hole_sound.html)

接口是1到N个特征/功能列表,但不知道它们将如何具体实现,以及可以任意(对于谁不存在规则)归因于来自根本不同的不同集合(动物或机器人)的实体的特征/功能列表。

面向对象编程借鉴了现实生活中的许多概念。这就是为什么这些类比如此有效。

Objective C中的,与其他一些语言(C#等)相反,

对于抽象类,没有语言级别的支持。在编译过程中,不可能强制类是抽象的。类只有在约定的情况下才是抽象的,并且由开发人员遵守该约定。

至于接口,在objective C中使用了一个词“协议”,这只是一个不同的词来表示相同的东西。

在objective C中,您可以

对接口 ..by执行

  • code,将某些对象声明为

通过声明类符合您在类接口中执行的协议,将附加功能添加到类id

  • add

@ ClassName 接口

因此,甚至可能存在这样的情况,即您的类是抽象类的子类,并且它也符合某些协议。

票数 71
EN

Stack Overflow用户

发布于 2017-01-24 02:03:29

感谢罗布·纳皮尔在here上的评论。我的答案是:

接口只是类的外部视图。它公开地揭示了什么。

在Swift中,你只需在一个.Swift文件中编写一个类,如果让Xcode来展示你可以使用generate its interface。Xcode将只显示,然后显示公共/内部的属性/函数。

在Objective-C中。首先,您必须手动,编写interface...declaring什么类是公共的,然后再手动编写实现。没有实现的接口是不可编译的。这就像您说这就是我的类将是什么样子,但是您没有为提供任何内容:它是如何实现公共方法的,或者您是如何操作您的属性的-当您必须(提供)时。

抽象使您不必了解它实现的方式

对于抽象类,您不应该提供任何实现,只是它将具有这样的参数或具有这样的签名的函数。但是,抽象类本身是可编译的。因为你不需要提供比这更多的东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28726170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档