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