4

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

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

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().

如何在Objective C中做到这一点?有可能吗?在Objective C中可行吗?我的意思是整个范式在Objective C中似乎有所不同,例如,据我所知,没有办法禁止覆盖方法(比如在Java中使用'final')?

谢谢!

4

2 回答 2

11

在目标 c 中不覆盖方法没有实际限制。您可以使用 Dan Lister 在他的回答中建议的协议,但这仅有助于强制您的符合类实现该协议中声明的特定行为。

目标 c 中抽象类的解决方案可能是:

interface MyClass {

}

- (id) init;

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

这样,您可以防止调用抽象类中的方法(但仅在运行时,不像 java 这样的语言可以在编译时检测到这一点)。

于 2012-06-27T08:39:02.950 回答
4

你会想要使用Protocols我认为的东西。

于 2012-06-27T08:32:25.397 回答