【问题标题】:What does "multiple base classes" mean?“多个基类”是什么意思?
【发布时间】:2012-09-28 17:55:17
【问题描述】:

David Chisnall 的“Objective-C for Java Programmers,第 1 部分”介绍指出

因为你可以有多个基类,Objective-C 引入了 id 类型来表示指向某种对象的指针。你可以 在任何对象类型和 id 之间隐式转换。

据我所知,Objective-C 是单一继承(与 Java 类似,但与 C++ 不同)。

那么“多个基类”是什么意思(在这种情况下)?

【问题讨论】:

  • 他们只是在说类层次结构中多个祖先的单一继承吗?
  • 这正是我最初的想法,但我没有足够的知识知道这一点,而且@bbum 肯定只是澄清了这意味着什么。 Objective-C 不同于 Java 和 C++。 :-)

标签: objective-c inheritance


【解决方案1】:

这意味着您可以定义自己的根或“基”类。

@interface MyRootClass
@end

请注意,它不继承自 NSObject

在实践中,这永远不会完成,因为该类不能真正与其他系统 API 互操作地使用,因为它们都期望 NSObject 继承行为。

不过,这并不是id 类型背后的真正动机。 id 类型意味着,从字面上看,这个对象引用可以是任何类的实例

可能有多个基类是完全正交的。

不,实现 NSObject @protocol 还不够好。

【讨论】:

  • 从历史上看(NeXT 之前),对象没有单独的类型,如 NSObject* 或 NSString*;他们都只是id(这是一种指针)。即使您现在可以将对象声明为指向特定类的指针,但仍然保留了 id 作为包罗万象的旧用法。
  • 1994 年之前的 NeXT 类层次结构植根于 Object 并且几乎完全继承自它。 IIRC,StepStone 的对象层次结构也是如此。在常用的 ObjC 环境中,总是有一个强烈的概念,即一个根类来统治它们。
  • 1994 年之前的 NeXT 类与 StepStone 类基本相似,还是更类似于后来的 NS* 类?
  • 这些类主要是 StepStone 的类,在这里和那里进行了一些修改。 Object、List 和 Hash 都是由运行时提供的(List 和 Object 的残余部分仍在现代运行时中)。两者分歧的地方在于 AppKit (NeXT) 和各种 ICPaks (StepStone)。不过已经很久了,细节还很模糊。
猜你喜欢
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多