2

我知道这个问题已经被提出过很多次了。但我找不到关于所有这些变量的完整指南。我发现了几篇比较类变量与类实例变量的文章,但是实例变量呢?那么,实例变量类变量类实例变量

之间有什么区别?哪些变量是可继承的,哪些不是?

4

2 回答 2

4

实例变量是属于一个特定对象(又名实例)的变量。在这种情况下,继承是无关紧要的,因为对象不能从任何东西继承,只有类可以。

类实例变量不存在。类和任何其他对象一样是对象,因此它们可以像任何其他对象一样具有实例变量。当一个类有一个实例变量时,这有时被称为类实例变量,但它只是一个实例变量。所以,再一次,它不能被继承。

类变量是奇怪的野兽。它们之间共享

  • 班级本身
  • 类的所有实例
  • 该类的所有子类
  • 类的所有子类的所有实例
  • 类的所有子类的所有子类
  • 类的所有子类的所有子类的所有实例
  • ……等等……</li>

考虑到它们的共享范围有多广,它们实际上更像是全局变量。

您可以将其称为共享继承,但我认为这不是一个有用的术语。没有多态调度,没有消息发送,没有覆盖。

在 Ruby 中,术语继承实际上只对方法有意义,对变量没有意义。

于 2012-08-21T11:41:10.477 回答
0

实例变量是其数据随对象的每个实例而变化的变量。

类变量是在类的所有实例之间共享的变量。实际上,每个实例都指向相同的值,并且在所有类实例中都可以看到变化。

于 2012-08-21T11:37:50.080 回答