Objective-C的抽象类

Abstract class for Objective-C

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Creating an abstract class in Objective C

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

但是,我找不到类似于"抽象"(Java)、"虚拟"(C++)的思想。

客观C没有抽象的概念吗?谢谢您。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@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

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

高温高压


从形式上讲,抽象类是通过在基类中删除方法来实现的,然后记录子类必须实现这些方法。作者有责任编写与类合同匹配的类,而不是编译器来检查缺少的方法。

Objtovi-C具有类似Java接口的协议。如果你在爪哇寻找一个等价于纯C++的类或接口,这就是你想要的。