我最初是一名 Java 程序员,现在使用 Objective-C。我想创建一个抽象类,但这在 Objective-C 中似乎是不可能的。这可能吗?
如果不是,我可以在 Objective-C 中与抽象类有多接近?
最佳答案
通常,Objective-C 类只是按照约定是抽象的——如果作者将一个类记录为抽象类,则不要在没有继承它的情况下使用它。然而,没有编译时强制阻止抽象类的实例化。事实上,没有什么可以阻止用户通过类别(即在运行时)提供抽象方法的实现。您可以通过在抽象类的方法实现中引发异常来强制用户至少覆盖某些方法:
[NSException raise:NSInternalInconsistencyException
format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)];
如果你的方法返回一个值,使用起来会更容易一些
@throw [NSException exceptionWithName:NSInternalInconsistencyException
reason:[NSString stringWithFormat:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)]
userInfo:nil];
那么你就不需要从方法中添加返回语句了。
如果抽象类真的是一个接口(interface)(即没有具体的方法实现),使用 Objective-C 协议(protocol)是更合适的选择。
https://stackoverflow.com/questions/1034373/