• 关于Ruby中的继承

    日期:2009-10-13 | 分类:ruby/rails | Tags:ruby 继承

        万物皆对象

        在Ruby里,所有的类都是Object的子类

        上面这两句话,熟悉否?不过,这两句话还没有把ruby中的一些继承关系说明出来,根据我个人的一点知识,总结一下,看一段代码

    > String.class #=> Class

    > Time.class #=> Class

    > Class.class #=> Class

    # 我们常用的类,其类型都是Class,有趣的是,Class的类型也是自己。

    > Class.new #=> #<Class:0xb7cc0abc>

    > Class.new.class #=> Class

    # 看!Class的实例的类型仍然是自己。其实,我们常用到的类都是Class的一个对象,只不过它们是一个比较特殊的对象(类对象)。

    > String.superclass #=> Object

    # 现在,可以证明了,一切对象都是Object的子类。但Class呢,继续往下看

    > Class.superclass #=> Module

    >Module.superclass #=> Object

    # Class的父类是Module, 而Module的父类又是Object

    > Module.class #=> Class

    > Object.class #=> Class

    # 等等,你现在是不是有点晕了,好,那让我来总结一下吧。

    # 所有的类都是Object的子类,而所有类(包括Object)的类型都是Class(也包括Class自己),而Class的父类是Module, Module的父类是Object。用图展现一下吧(但愿没把你看的更糊涂)

     

     

    代码继续

    > Object.superclass #=> nil

    # 可见,Object是最顶层的类了,它没有父类

    > String.ancestors #=> [String, Enumerable, Comparable, Object, Kernel]

    > Object.ancestors #=> [Object, Kernel]

    # 可见,Object顶层还有,那就是核心(Kernel)了。刚刚不是说了Object是所有的类的父类了吗?怎么还会有更上一级呢?别忘了ruby中还有module的混入

    > Kernel.class #=> Module

    # 怎么样,现在有点明白了吧,或者是,更糊涂了那就再多看看,多想想吧

    分享到: