在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')?
谢谢!
答案 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
的东西。