从 Objective-C 的角度来看,"over ride" 是什么意思?

What does "over ride" mean from an Objective-C Standpoint?

在听到有关 objective-c 编程社区的讨论时,我经常听到 "override" 这个词。我相当熟悉一般的面向对象编程术语,但从 iOS 和 Objective-c 的角度来看,我对这个定义有点不清楚。根据维基百科:

Method overriding, in object oriented programming, is a language feature that allows a subclass or child class to provide a specific implementation of a method that is already provided by one of its superclasses or parent classes.

酷。那讲得通。但让我失望的是……这不是 "family relationship" 的全部要点吗,其中子类继承了其超类的所有 public 方法和变量。标准 "hierarchy" 模型。这对我来说从来都没有意义。我听到一些高级开发人员说 "Once he said it's okay to override a category I was done listening" 之类的话。

这让我开始思考,我可能应该更好地理解究竟什么是压倒一切。有人可以更详细地解释一下具体与 Objective-C / Cocoa Touch 相关的内容吗?

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

通常,基本 class 会为方法提供 默认(即简单、平淡)实现。然后,派生的 classes 将 覆盖 该默认实现并提供 特定的 (即更有趣的)实现。

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

A Dog class,派生自 Animal,可以 覆盖 Speak() 以实际发出吠叫声, 这比默认的静音案例更合适。

你的学长的话在我看来好像是听错了或记错了。我敢打赌它是“...可以在 类别中覆盖方法 我已经完成了...”

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

覆盖继承的方法按预期工作:class 定义了一个已在其祖先之一中定义的方法。当在subclass的实例上调用该方法时,重新定义的代码是运行。 class 本身可以通过使用 super 关键字作为适当消息的接收者来调用非覆盖版本。