在Object-C中创建抽象类

在Object-C中创建抽象类

我最初是一个Java程序员,现在正在使用Object-C。我想创建一个抽象类,但在Object-C中这似乎是不可能的。这个是可能的吗?

如果不是,我在目标C中离抽象类有多近?


阿波罗的战车
浏览 682回答 3
3回答

MYYA

通常情况下,Object-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];因此,您不需要从方法中添加返回语句。如果抽象类实际上是一个接口(即没有具体的方法实现),那么使用Object-C协议是更合适的选择。

繁花如伊

不,无法在Object-C中创建抽象类。您可以模拟一个抽象类-通过使方法/选择器调用doNotRecognizeSelector:从而引发一个异常,使该类不可用。例如:- (id)someMethod:(SomeObject*)blah{      [self doesNotRecognizeSelector:_cmd];      return nil;}您也可以为init这样做。
打开App,查看更多内容
随时随地看视频慕课网APP