从物镜C的角度来看,“过度骑行”意味着什么?

时间:2015-01-04 07:32:34

标签: ios objective-c oop override

在听取围绕Objective-c编程社区的讨论时,我听到了术语"覆盖"被扔了很多。我非常熟悉一般的面向对象编程术语,但从iOS和Objective-c的角度来看,这个定义对我来说有点不清楚。根据维基百科:

  

在面向对象编程中,方法覆盖是一种语言   允许子类或子类提供特定的功能   一个已经由其中一个提供的方法的实现   超类或父类。

冷却。那讲得通。但是让我失望的是......并不是"家庭关系"的全部要点,其中子类继承了它的超类的所有公共方法和变量。标准"等级"模型。这从来没有对我有意义。我听到一些高级开发人员说过诸如"一旦他说可以覆盖我听完的类别"。

这让我思考,我应该更好地掌握究竟压倒一切的原因。有人可以更详细地解释它与Objective-C / Cocoa Touch有关吗?

2 个答案:

答案 0 :(得分:4)

这在所有OOP语言中都很常见。

基类通常会为方法提供默认(即简单,不引人注意)的实现。然后,派生类将覆盖该默认实现,并提供特定(即更有趣)的实现。

考虑公开Animal方法的Speak()基类。那么动物说话没有共同的方式,所以默认的实现可能什么也不做。

Dog类来自Animal,可以覆盖 Speak()来实际发出吠叫声,这比默认静音更合适情况下。

答案 1 :(得分:1)

你的大四学生的引用似乎让我觉得它听错了或被记不清。我打赌它是" ...我可以覆盖类别类别中的方法..."

使用类别"覆盖"一个方法在同一个类上是一个坏主意:原始方法被破坏,无法调用。此外,如果原始方法本身是在一个类别中实现的,那么实际使用的是哪个版本is undefined。这与覆盖继承的方法相同(因此我的恐慌引用)。

重写继承的方法按预期工作:类定义已在其祖先之一中定义的方法。在子类的实例上调用该方法时,将运行重新定义的代码。类本身可以使用super关键字作为相应消息的接收者来调用未被覆盖的版本。