从类的角度观察 String:

继承:

?> String.superclass
=> Object
>> String.superclass.superclass
=> BasicObject
>> String.superclass.superclass.superclass
=> nil
>> String.superclass.superclass.superclass.superclass
NoMethodError: undefined method `superclass' for nil:NilClass

nil 是 NilClass 的对象, 不是类, 没法响应 superclass 方法.

从对象的角度观察 String:

实例化:

?> String.class
=> Class
>> String.class.class
=> Class

任意类都是 Class 类的实例对象.

Class 类

Class 类继承自 Module 类; ClassClass 对象实例化产生.

>> Class.superclass
=> Module
>> Class.ancestors
=> [Class, Module, Object, Kernel, BasicObject]
>> Class.class
=> Class

小结:

module MyModule
  def say
    "this is MyModele"
  end
end

class MyClass
  def say
    "this is MyClass"
  end
end

p MyModule.is_a?(Module) #true
p MyClass.is_a?(Class) #true

puts "MyModule 由 Module 类产生:"
p MyModule.class # Module
p MyModule.class.class # Class
p MyModule.class.class.class # Class
p MyModule.superclass rescue p "MyModule 不是类, 没法响应superclass方法"

puts "MyClass 由 Class 类产生:"
p MyClass.class # Class
p MyClass.class.class # Class
p MyClass.class.class.class # Class
p MyClass.superclass # Object

puts "Class 类继承自 Module 类:"
p Class.superclass  # Module

一种比喻:

String类就好比一个机床, 它可以制造一种字符串零件.

String机床的设计继承自Object机床.

String机床是由Class机床制造出来的.

Class机床是由Class机床制造出来的.

Class机床的设计继承自Module机床, Module机床的设计继承自Object机床.