【问题标题】:Why can I call a subclass method with a superclass pointer in Objective-C?为什么我可以在 Objective-C 中使用超类指针调用子类方法?
【发布时间】:2013-08-20 13:54:58
【问题描述】:

我有两个班级,FoodNachoFoodNacho 的超类。

Food *junk = [[Nacho alloc] init];

只要我调用Food的方法就有效,对吧?

但是为什么Food 指针可以调用Nacho 的方法之一(在子类中定义为附加方法)?

  • 已修复,已从类名中移除“NS”前缀。

【问题讨论】:

  • 旁注 - 我知道这是一个示例,但让 NSSon 类扩展 NSMom 类实际上是一个糟糕的 OO 设计。 “儿子”不是特定类型的“妈妈”。 NSSonNSMom 可能会共享一个公共基类。
  • 我明白你的意思,他们实际上并没有分享 Person 和 Student 之类的东西,但感谢您的评论:)
  • 另外注意:NS 前缀是 Apple 保留的。 Apple 建议在您自己的类名前加上三个或更多字母。见Programming with Objective-C

标签: objective-c methods subclass superclass derived-class


【解决方案1】:

嗯,它并不是真正的NSMom 实例,因此您可以在运行时调用它,因为NSSon 实例确实实现了该方法。在编译时你确实需要做一些事情来告诉编译器它不应该检查类型(或者它应该信任你)。

除此之外 - 不要在实际代码中为您自己的类添加“NS”前缀。迟早你会与 Apple 课程发生冲突。

【讨论】:

  • 我明白你的意思。即使指针类型定义为 NSMom,实例本身也是 NSSon,因此它可以调用 NSSon 的方法。谢谢:)
猜你喜欢
  • 2011-12-21
  • 1970-01-01
  • 2018-11-05
  • 2018-08-22
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
相关资源
最近更新 更多