0

我有一个类,其中一些方法既没有在 .h 文件中也没有在任何类别中声明,我想在子类中覆盖这些方法以稍微改变行为。我正在考虑简单地在子类中重新定义这些方法。这是个好主意吗?它甚至会起作用吗?

4

3 回答 3

0

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

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

// MyClass_protected.h

- (void)someMethodThatYouWantSubclassesToBeAbleToOverride;

然后

// MyClass.m

#import "MyClass_protected.h"

// MySubClass.m

#import "MyClass_protected.h"
于 2012-11-26T08:26:59.610 回答
0

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

否则你需要让派生类知道父类中的方法。

于 2012-11-26T06:57:45.537 回答
0

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

于 2012-11-26T06:52:54.100 回答