为什么不能在objective-c中创建抽象类

时间:2012-01-11 18:51:43

标签: objective-c abstract-class

因为实际上不可能在objective-c中创建抽象类,我想知道是否有人能告诉我为什么 objective-c的创建者没有将此功能添加到该语言中。

* 当然有一些解决方法来创建一个抽象类 - 但这不是我的意思。

1 个答案:

答案 0 :(得分:9)

如果你的意思是为什么你不能声明一个类抽象而不是仅仅将它实现为一个抽象类,我想这是因为它与Objective-C的极其动态,类型 - 可选,Smalltalky消息没有很好的交互 - 传递样式(Smalltalk没有内置支持来声明它们)。例如:

  • 您可能不知道您要向allocinit发送什么课程,因此这将是一个相当薄弱的保证

  • 子类可能仍需要将allocinit传递给类层次结构,因此我们需要允许它,使其成为更弱的保证

  • 类别在运行时修改类,使其仍然是较弱的抽象合同

最后,您最终会得到一个关键字,它与我们现在实现的抽象类大致完全相同(例如,如果接收者不是子类,则可以覆盖init保释)。

只要指定一个契约的类型修饰符就越依赖静态类型系统变得越来越有用 - 但是Objective-C的设计并不是那么依赖于类型系统,所以将契约放在类型系统中就少了比其他语言更有用。