在Objective C中,如果您正在创建子类,并打算覆盖超类上的方法,是否应该在子类@interface中重新声明超类方法?例如,如果您是UIViewController的子类(例如MyViewController),并且您计划覆盖“viewDidLoad”,那么您应该在MyViewController @interface声明中包含该方法,还是仅在MyViewController.m中实现它?在我遇到的例子中,我已经看到它在两种方式下完成(在子类接口中重新声明方法,或者不重新声明方法)。可能没有任何功能差异,但最佳做法是什么?覆盖超类中方法的目标C子类
15
A
回答
26
我经常声明方法,我计划在公共头中或至少在私人类别中覆盖。这样做的好处是,如果您忘记实际覆盖该方法,您将不时得到不完整的类定义警告......这种方法时常派上用场。
至于当把它放在公共标题,这是非常主观的,可能取决于你/你的团队的编码风格。如果我打算彻底改变方法将要做的事情,或者如果我打算不调用超类的方法版本,我通常只在公共头文件中重新声明一个方法。
5
人们经常使用头文件作为类的文档(和像AutoDoc这样的工具支持这个)。显然,如果你遵循这个约定,唯一明智的选择是包含重新定义的方法,这样你就可以解释你对它们做了什么。否则,你的文档不是不完整的,或者分散到地球的四个角落。
但是,如果我们只是复制粘贴声明,我个人不喜欢重新声明方法。这不是DRY,它不必要地膨胀你的头。代码越少代码越好。
相关问题
- 1. 覆盖类方法:包括子类方法中的超类方法JAVA
- 2. 覆盖java中超类'超类的方法?
- 3. 调用覆盖方法,超类调用覆盖方法
- 4. 如何覆盖子类中的方法?
- 5. 当子类覆盖了一个超类方法
- 6. 目标C类扩展 - 如何用readwrite方法覆盖只读?
- 7. 方法不会覆盖java中的超类的方法
- 8. 强制子类覆盖父的方法
- 9. 覆盖Child类中的ParentModel类方法
- 10. Python:在超类的未覆盖方法中从子类访问变量
- 11. 覆盖在子类C#
- 12. Objective C - 覆盖基类的方法 - 如何调用子类的方法?
- 13. JavaScript子类化和方法覆盖
- 14. 方法不会覆盖超类的方法
- 15. JsonHttpResponseHandler - 方法不会覆盖超类的方法
- 16. 方法不会覆盖超类的方法
- 17. 方法不覆盖或实现超类型的方法
- 18. 覆盖超类的方法,以返回另一个supeclass方法
- 19. 方法不会覆盖超类的方法
- 20. C# - 仅在子类中调用覆盖方法
- 21. 覆盖actionscript中的子类
- 22. 覆盖子类中的init
- 23. 覆盖基类方法
- 24. 如何覆盖类方法
- 25. 在超类中覆盖等于但不在子类中?
- 26. 奇数类型的onClick(View)方法必须覆盖超类方法吗?
- 27. 超类/子类方法
- 28. 在保留超类方法的内容的同时覆盖子类中的方法
- 29. python中覆盖类的方法
- 30. 覆盖子类中的返回类型
+1这是有道理的。有个名字叫“Coco(a)”的人必须知道他在做什么。 – 2009-04-21 00:59:31
即使超类有一个实现,你会得到一个不完整的定义警告?我不知道;总是认为声明已经存在于超类中的方法是多余的,无论你是否覆盖它。 – 2012-07-07 08:57:15