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

时间:2012-06-27 08:30:13

标签: objective-c class methods virtual abstract

  

可能重复:
  Creating an abstract class in 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中它可行吗?我的意思是整个范式在目标C中似乎是不同的,例如根据我的理解,没有办法禁止覆盖一个方法(比如Java中的'final')?

谢谢!

2 个答案:

答案 0 :(得分:11)

没有覆盖目标c中的方法的实际约束。你可以使用Dan Lister在他的回答中建议的协议,但这只能强制你的符合类来实现在该协议中声明的某个行为。

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

interface MyClass {

}

- (id) init;

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

这样就可以防止抽象类中的方法被调用(但是只能在运行时调用,而不像java这样的语言可以在编译时检测到它)。

答案 1 :(得分:4)

我想要使用名为Protocols的东西。