Ruby-嵌套类和子类是一回事吗?

时间:2017-06-29 22:30:32

标签: ruby inheritance

以下示例中NestedChild之间的区别是什么?这只是同一件事的不同语法吗?

class Parent
  class Nested
    ...
  end
end

class Child < Parent
  ...
end

2 个答案:

答案 0 :(得分:6)

,它们不同。

嵌套:&#39;处理器&#39;计算机外部的类只能作为Computer :: Processor访问。嵌套为内部类(命名空间)提供上下文。对于ruby解释器Computer and Computer :: Processor只是两个独立的类。

 class Computer
  class Processor # To create an object for this class, this is the syntax Computer::Processor.new. The Outer class provides context

Child:下面是类继承,Parent类的实例/类方法可用于Child。可以像这样Child.new/Parent.new

实例化Child / Parent
class Child < Parent

请注意,Processor只能访问Computer::Processor ,只需调用Processor就会抛出错误。同样地,调用Child是好的,但调用Parent::Child会发出警告(虽然它实际上会运行正常)。

答案 1 :(得分:1)

一些术语:

  • Nested 嵌套内部,因为它属于类Parent引入的名称空间 。但请注意,正如@Jorg所建议的那样, NOT 是一个通常意义上的嵌套类(参见,in Java)。
  • Child是类Parent子类子类,通过子类化指定,又名< strong>继承(is-a relationship),Child < Parent。粗略地说,Child继承了Parent
  • 中的方法

要真正了解嵌套类会发生什么,您需要知道常量如何在Ruby中工作。

  • 有关详细信息,请参阅here
  • 从根本上说,常量存在于名称空间的层次结构中,其中名称空间是classmodule定义。
  • 范围运算符::可用于在命名空间的层次结构中移动以选择常量。
  • 在(第一次出现的)class定义中,例如class C; ...; end,创建一个类,并绑定到一个常量C,它将成为该类的名称。