关于类:在Objective C中模拟抽象类和抽象方法?

Simulate abstract classes and abstract methods in Objective C?

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

Possible Duplicate:
Creating an abstract class in Objective C

在Java中,我喜欢使用抽象类来确保一组类具有相同的基本行为,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public abstract class A
{
// this method is seen from outside and will be called by the user
final public void doSomething()
{
// ... here do some logic which is obligatory, e.g. clean up something so that
// the inheriting classes did not have to bother with it

reallyDoIt();
}
// here the actual work is done
protected abstract void reallyDoIt();

}

既然类B继承自类A,那么它只需要实现reallyDoIt()

如何在目标C中实现这一点?有可能吗?在目标C中是否可行?我的意思是,整个模式在目标C中似乎是不同的。例如,从我所理解的,没有办法禁止重写一个方法(比如在Java中用"最终")。

谢谢!


不重写目标C中的方法没有实际的约束。您可以使用Dan Lister在其答案中建议的协议,但这只适用于强制一致性类实现该协议中声明的某些行为。

目标C中抽象类的解决方案可以是:

1
2
3
4
5
6
7
8
9
10
interface MyClass {

}

- (id) init;

- (id) init {
   [NSException raise:@"Invoked abstract method" format:@"Invoked abstract method"];
   return nil;
}

这样可以防止抽象类中的方法被调用(但只在运行时不同于Java这样的语言,可以在编译时检测到这一点)。


我想你会想用一种叫Protocols的东西。