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

Tie*_*eme 5 abstract-class objective-c

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

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

Chu*_*uck 9

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

  • 你可能不知道您发送的信息类allocinit到,所以这将是一个相当薄弱的保证

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

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

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

只需指定一个契约的类型修饰符就越有用,你依赖静态类型系统就越多 - 但Objective-C的设计并不是那么依赖类型系统,所以将契约放在类型系统中没有那么有用了.其他一些语言.