Objective-C的抽象类

aki*_*iwa 1 abstract-class objective-c

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

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

但是,我找不到类似"抽象"(在java中),"虚拟"(在c ++中)的想法.

Objective-C不具有抽象概念吗?谢谢.

CRD*_*CRD 12

没有抽象类,但您可以使用协议(类似于Java的接口)的组合来生成类似的东西.首先将您的抽象类划分为您希望提供默认实现的方法以及您需要实现子类的方法.现在声明一个默认方法并在一个中@interface实现它们@implementation,并在一个中声明所需的方法@protocol.最后从class<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
Run Code Online (Sandbox Code Playgroud)

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

HTH


Jon*_*pan 8

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

Objective-C具有协议,类似于Java接口.如果您正在寻找相当于纯虚拟 C++类或Java中的接口,那么这就是您想要的.