覆盖子类中未声明的方法

时间:2012-11-26 06:46:34

标签: objective-c ios

我有一个类,它既没有在.h文件中声明也没有在任何类别中声明,我想在子类中重写这些方法来稍微改变行为。我想只是在子类中重新定义这些方法。这是个好主意吗?它会工作吗?

3 个答案:

答案 0 :(得分:0)

它将“工作”,因为编译器允许它。定义这些方法的类可能假设它们在调用时会执行特定的操作,在覆盖它们时,您的实现需要遵守这些内容,以避免在使用类的接口时引入错误。

答案 1 :(得分:0)

您可以覆盖基类中的私有方法,但问题是您无法调用[super someMethod]。如果您希望完全替换原始方法,那么这不是问题。

否则,您需要让派生类了解父类中的方法。

答案 2 :(得分:0)

理想情况下,子类需要知道方法是什么,如果它想要覆盖方法并仍然调用super。

这样做的一种方法是使用一个单独的头文件,超类和子类实现都可以导入。

// MyClass_protected.h

- (void)someMethodThatYouWantSubclassesToBeAbleToOverride;

然后

// MyClass.m

#import "MyClass_protected.h"

// MySubClass.m

#import "MyClass_protected.h"