gpt4 book ai didi

objective-c - Objective-C中抽象类和接口(interface)之间的区别

转载 作者:太空狗 更新时间:2023-10-30 03:16:07 24 4
gpt4 key购买 nike

ios开发者访谈中最常被问到的问题之一是抽象类和接口之间的区别。
我不知道答案,也不知道。当您声明方法时,接口是类的一部分。它可以为其他类(public,.h文件)打开,也可以隐藏在实现中。
抽象类是一个类,它只用于创建隐藏的子类,不应该有自己的init方法(如果我理解正确的话)。
那么,这个问题的答案到底是什么?那个问题是什么意思?
我确实花了时间寻找答案,但答案与obj-c无关,所以我无法自己找出答案。
我希望有人能提供明确的答案,这个问题将有助于那些家伙,谁想通过面试。

最佳答案

解决这一问题的一个好方法是首先在一般程序设计理论中考虑它,然后在更具体的Objto-C上下文中考虑它。
抽象类-是一个纯粹用于子类化的类,不能实例化它。抽象类声明了一些东西,并为此实现了。
有这么特别的课是什么原因?它是模仿现实生活之后的!:)
想象一个抽象的动物。每种动物有什么共同点?他们都活着(而且可能会死)。他们需要吃东西。可以在太空中移动。这些特征对所有动物来说都是共同的和基本的。我从来没有听说过一种动物不需要食物,不能移动,永远活着。除此之外,各种动物之间还有很多不那么根本的区别。
地球上没有一种动物是纯粹的抽象动物。那一套基本的行为,特征根本就不足以成为一种具体的动物。
有一个隐含的原则,作为一个具体的动物,除了那些基本的动物之外,你还必须有一些额外的特性。
现在,在编程中,我们需要能够以某种方式
表达这些基本原理(界面声明)
有一种描述它们如何工作的方法(实现)
把它们归为一个类
阻止实例化
确保任何混凝土动物都有它们(遗传)
我们知道,这些基本原理是什么(公开的接口),我们在实践中知道它们如何具体地表现自己(这些声明特征的实现)。我们希望它们被所有具体实体继承。所以我们在抽象类中做,因为它满足我提到的这些条件。它包含所有的基本原理,有它们的实现,但不能自己实例化。
抽象类是对一组相关实体的抽象,它捕获了它们之间的根本共同点。它告诉我们它是如何完成的,并确保所有更具体的实体都将继承它。
界面-不是什么。让我们做一个现实生活中的类比。人,机器人,动物,风(自然力)。
有些人会唱歌。机器人嵌入了一个语音合成器模块,这样它就可以唱歌了。秋风拂过我的玻璃,我可以告诉你很多。我的狗丁卡,实际上也是个好歌手。
但实际上,这四个人之间的“唱歌”只有一个共同点——你可以在耳朵里听到悦耳的声音。这四个人的演唱方式在现实中有很大不同。(实施)
另一个复杂的问题是,当然不是所有的人、狗、风或动物都会唱歌。其中一些可以。
那么,我们如何反映编程中的这种情况呢?通过接口:)
您可以有一个名为"SingInterface"的接口,在我们的例子中,它声明了一个行为/特性/功能,它是sing。接口简单地声明一些东西,就是这样。接口没有说明如何完成某件事情,没有具体的实现。它也没有说明谁能做到这一点,接口中的特性实际上并不局限于一个类型或一个类。(见http://www.nasa.gov/centers/goddard/universe/black_hole_sound.html
接口是一个1到n个特征/功能的列表,不知道它们将如何具体实现,以及可以任意地(没有规则存在于WHO)的特征/功能列表,这些实体/功能归因于来自根本不同的不同集合(动物或机器人)的实体。
面向对象编程从现实生活中借用了许多概念。这就是为什么这些类比如此有效。
在目标C中,与其他一些语言(C等)相反,
抽象类没有语言级别的支持。在编译期间不可能强制类是抽象的。一个类只有通过约定才是抽象的,并且开发人员必须遵守该约定。
至于接口,在对象C中使用了“协议”一词。
在目标C中你可以
针对接口的代码..通过将某个对象声明为

 id<protocolName>

通过声明类符合在类接口中执行的协议,向类添加附加功能
@interface ClassName <protocolName>

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

关于objective-c - Objective-C中抽象类和接口(interface)之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28726170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com