在听取围绕Objective-c编程社区的讨论时,我听到了术语"覆盖"被扔了很多。我非常熟悉一般的面向对象编程术语,但从iOS和Objective-c的角度来看,这个定义对我来说有点不清楚。根据维基百科:
在面向对象编程中,方法覆盖是一种语言 允许子类或子类提供特定的功能 一个已经由其中一个提供的方法的实现 超类或父类。
冷却。那讲得通。但是让我失望的是......并不是"家庭关系"的全部要点,其中子类继承了它的超类的所有公共方法和变量。标准"等级"模型。这从来没有对我有意义。我听到一些高级开发人员说过诸如"一旦他说可以覆盖我听完的类别"。
这让我思考,我应该更好地掌握究竟压倒一切的原因。有人可以更详细地解释它与Objective-C / Cocoa Touch有关吗?
答案 0 :(得分:4)
这在所有OOP语言中都很常见。
基类通常会为方法提供默认(即简单,不引人注意)的实现。然后,派生类将覆盖该默认实现,并提供特定(即更有趣)的实现。
考虑公开Animal
方法的Speak()
基类。那么动物说话没有共同的方式,所以默认的实现可能什么也不做。
Dog
类来自Animal
,可以覆盖 Speak()
来实际发出吠叫声,这比默认静音更合适情况下。
答案 1 :(得分:1)
你的大四学生的引用似乎让我觉得它听错了或被记不清。我打赌它是" ...我可以覆盖类别类别中的方法..."
使用类别"覆盖"一个方法在同一个类上是一个坏主意:原始方法被破坏,无法调用。此外,如果原始方法本身是在一个类别中实现的,那么实际使用的是哪个版本is undefined。这不与覆盖继承的方法相同(因此我的恐慌引用)。
重写继承的方法按预期工作:类定义已在其祖先之一中定义的方法。在子类的实例上调用该方法时,将运行重新定义的代码。类本身可以使用super
关键字作为相应消息的接收者来调用未被覆盖的版本。