【发布时间】:2015-02-25 17:53:07
【问题描述】:
iOS 开发者面试中最常见的问题之一是 - 抽象类和接口之间的区别。
我不知道答案,我也不明白。当您声明方法时,接口是类的一部分。它可以对其他类(公共、.h 文件)开放或隐藏在实现中。
抽象类是一个类,它只用于创建隐藏的子类,它不应该有自己的 init 方法(如果我理解正确的话)。
那么,这个问题的答案到底是什么?这个问题是什么意思?
我确实花时间寻找答案,但答案与 Obj-C 无关,所以我自己无法弄清楚。
我希望有人能提供明确的答案,这个问题对那些想通过面试的人有所帮助。
【问题讨论】:
-
确切的答案是:ObjectiveC 没有抽象类...
-
@EvgeniyKleban 它们在概念上是抽象的,而不是在功能上抽象的。 Objective-C 不支持真正的抽象类,例如 Java。
-
@EvgeniyKleban “我无法回答这个问题,因为 ObjC 没有抽象类”正是正确的答案:D(“也许我正在面试错误的工作?你确实要求一个 Cocoa 开发者,对吧?”)
-
旁注:虽然不可能在编译期间强制执行此操作,但(令人惊讶的是)可以在
+load时间(在大多数代码执行之前)强制执行此操作。尼克洛克伍德最近展示了一种技术。 github.com/nicklockwood/MustOverride。这有点疯狂,实际上很少见,但却是一个非常有趣和启发性的成就。 -
@Honey 接口不是抽象类。抽象类永远不应该被实例化;只有它们的子类是有意的。
.h定义了一个类,但它不是抽象的。您当然打算创建该类型的实例。在您的示例中,在提供实现之前,根本无法编译该类。抽象类(在 C++/Java/etc 中)绝对可以在没有实现所有部分的情况下进行编译。他们只是不能被实例化。所以你所描述的在意图和机制上是不同的。
标签: objective-c