1

可能重复:
在 Objective C 中创建抽象类

我想在 Objective-C 项目中创建抽象类。

但是,我找不到诸如“抽象”(在 java 中)、“虚拟”(在 c++ 中)之类的想法。

Objective-C 没有抽象概念吗?谢谢你。

4

2 回答 2

12

没有抽象类,但您可以使用协议的组合来生成类似的东西(类似于 Java 的interface)。首先将您的抽象类划分为您希望为其提供默认实现的方法和您需要子类来实现的方法。现在在 an 中声明默认方法并在 an 中@interface实现它们@implementation,并在 an 中声明所需的方法@protocolclass<protocol>最后从实现协议的类派生您的子类。例如:

@interface MyAbstract

- (void) methodWithDefaultImplementation;

@end

@protocol MyAbstract

- (void) methodSubclassMustImplement;

@end

@implementation MyAbstract

- (void) methodWithDefaultImplementation { ... }

@end

@interface MyConcreteClass: MyAbstract<MyAbstract>
   ...
@end

@implementation MyConcreteClass

// must implement abstract methods in protocol
- (void) methodSubclassMustImplement { ... }

@end

如果您担心对类和协议使用相同的名称,请查看NSObject遵循此模式的 Cocoa...

高温高压

于 2012-12-10T08:30:35.943 回答
8

正式地,没有。抽象类是通过在基类中存根方法来实现的,然后记录子类必须实现这些方法。作者有责任编写与类契约匹配的类,而不是编译器检查缺失的方法。

Objective-C 有协议,类似于 Java 接口。如果您正在寻找与纯虚拟C++ 类或 Java 中的接口等价的东西,这就是您想要的。

于 2012-12-10T01:43:54.907 回答