`
yjjxf
  • 浏览: 42056 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Ruby 类的继承

    博客分类:
  • Ruby
阅读更多
一、普通方式的继承
 Ruby只支持单继承
 
ruby 代码
  1. class Child < Father   
  2. ......   
  3. end  


    Object是所有类的始祖,并且Object的实例方法对ruby的所有对象都是可用的。
    super的使用:
         1、在initialize中使用super,将调用其父类的initialize方法
         2、在一般的实例方法中使用,将调用其父类中同名的方法。
   向一个对象发送调用方法时,ruby的本质过程如下:
         1、ruby将检查该对象所属的类,如果该类实现了该方法,就运行该方法
         2、如果该类没有实现该方法,ruby将找到其直接父类中的方法,然后是其祖父类,凡此以往追溯整个祖先链
         3、如果最终没有找到合适方法,ruby会产生一个特殊的行为,引发异常错误
   (注意这里父类,如果该类中include了一个module,则ruby如果在该类中没有找到该方法定义是,会把module当成直接父类)


二、Mixin
       这个是ruby提供给模块的功能。类定义中,通过include一个模块。当类使用include后,模块的所有的实例方法(和常量)在该类中就可以使用了。下图显示了类和mixin模块之间的关系其原理是,当一个类包含一个模块时,Ruby创建了一个指向该模块的匿名代理类,并将这个匿名代理插入到实施包含的类中作为其直接超类。代理类中包含有指向模块实例变量和实例方法的引用。这个代理类是唯一指向底层模块:改变模块中某个方法的定义
   它将改变所有包含该模块的类。


    注意:
    1、模块和类的区别在于,模块不能实例化,类不能include
    2、如果模块和类不在同一个文件中,如果要使用include,则先使用require,把文件引入。
    3、include并不是简单的将模块的实例变量和方法拷贝到类中,而是,它是建立一个由类到所包含模块的引用。如果多个类
    引用该模块,都将指向同一个模块。
     4、如果有多个include,将依次生成代理类,最后一个include的将是该类的直接超类,依次向上衍生
    5、含有include的模块或类定义,可以访问它所包含的常量,类变量和实例方法。如果一个模块被包含,那么模块的常量,类变量,
    实例方法都被绑定到该类的一个匿名超类中,类的对象会响应发送给模块实例方法的消息。
    6、模块里可以定义一个initialize方法,当创建包括模块的类的对象是,如果满足如下条件之一,那么模块的该方法将被调用
       a、类没定义它自己的initialize方法
       b、类的initialize方法中调用了super
三、extend使用
   通过使用Object#extend将一个模块混合到类中,如果在类中使用extend,模块的方法会变为类方法。其原理如图:

分享到:
评论

相关推荐

    Ruby类继承、抽象类、类拓展混入、代理类实例

    当多个类公用很多方法的时候可以将公用方法部分抽取出来,需要的类做相关继承。 例子: 代码如下: class A ”it was a “ C.new.a #=&gt;”it was a “ 2、抽象类 当多个类要继承一个类时,用第一种方法,会遇到一个...

    Ruby 写的脚本,可以提取 iOS 项目中的类继承关系

    用 Ruby 写的脚本,可以提取 iOS 项目中的类继承关系。 用法: ruby class_hierarchy.rb path_to_iOS_project 抽取出的类关系会在 Ruby 脚本的当前执行目录下生成 Extracted 文件夹,里面是 JSON 格式的结果文件。...

    用 Ruby 实现的脚本:可以提取 iOS 项目中的类继承关系

    这个Ruby脚本的目的是从iOS项目中提取出类的继承关系,并以JSON格式导出结果文件。利用这个脚本,我们可以便捷地分析一个iOS项目的类结构。 脚本的工作原理是遍历iOS项目中的所有Swift文件,通过解析语法树来找出类...

    Ruby优化继承类实例

    主要介绍了Ruby优化继承类实例,本文直接给出一个优化实例及实现代码,需要的朋友可以参考下

    Ruby超级继承实验室v-000

    Ruby超级继承实验室目标定义两个类,其中一个继承自另一个。 在子类中定义使用super关键字从父类继承并扩充其方法的方法。指示在本实验中,您将编码一个Student类(将成为父类)和一个ChattyStudent类(将从student...

    Ruby的教程.txt

    类与对象:理解Ruby中的类和对象的概念,学习如何定义类、创建对象以及使用对象的属性和方法。 继承与多态:掌握Ruby中的继承机制,了解子类如何继承父类的属性和方法,并实现自己的特定功能。同时,学习多态的...

    Ruby动态编程对象编程Ruby动态编程对象编程Ruby动态编程对象编程

    Ruby是一门简洁、灵活而又优雅的...它支持类、继承、封装等面向对象的概念,并提供了丰富的类库和模块,方便开发人员进行面向对象的编程。 4. 生态系统:Ruby拥有活跃的开源社区和丰富的生态系统,提供了大量的库和

    浅析Ruby中继承和消息的相关知识

    主要介绍了Ruby中继承和消息,是Ruby入门学习中的基础知识,需要的朋友可以参考下

    Ruby继承实验室v-000

    Ruby继承实验室目标定义从共享父类或父类继承的类。 定义那些类唯一的方法。概述在本实验中,我们将使用学校域模型。 我们的应用程序具有老师或学生的用户。 老师和学生将共享某些属性,并具有他们特有的某些行为。 ...

    Ruby编程语言

     7.3子类化和继承234  7.4对象创建和初始化241  7.5模块247  7.6加载和请求模块252  7.7单键方法和EIGENCLASS257  7.8方法查找258  7.9常量查找261  第8章反射和元编程265  8.1类型、类和模块266  8.2对...

    ruby学习资料大全,很全很丰富

    Ruby是"一种用于迅速和简便的面向对象编程的解释性脚本语言";这意味着什么?...类,继承,方法,等等 单态方法 模块糅合 迭代器和闭包(closures) 以及: 多精度整数 异常处理模式 动态装载 线程

    Ruby 小白入门指南理解 Ruby 及其特点.txt

    Ruby 的灵感来源于 Perl、Smalltalk、Eiffel、Ada 和 Lisp 等多种语言,它继承了这些语言的优点,同时增加了自己的特性。 二、安装 Ruby 环境 在开始编程之前,你需要在你的计算机上安装 Ruby 环境。你可以从 Ruby...

    Ruby的概要介绍与分析

    它支持类和对象的定义、继承、多态等面向对象的特性,使得开发者能够以面向对象的方式组织和管理代码。 Ruby社区也是一个充满活力的地方,为开发者提供了丰富的资源和支持。从初学者教程到高级编程技巧,从社区论坛...

    ruby语法基础教程

    §3.3 继承 20 §3.4 特殊方法与特殊类 21 §3.5 类变量与类方法 23 §3.4 存取控制 23 §3.6 元类 25 §3.7 Ruby的动态性 26 §3.8 变量 26 §3.8.1 局部变量 27 §3.8.2 实例变量 27 §3.8.3 类变量 27 §3.8.4 ...

    免费的一本好书关于Ruby学习

    支持类、继承、多态等面向对象概念,并提供了强大的元编程能力。 3. **动态性强**:Ruby 是一种动态类型语言,变量无需事先声明类型,运行时可以动态改变对象的结构和行为。 4. **强大的元编程能力**:Ruby 提供了...

    非常好的Ruby中文版项目资源,分享出来.zip

    这是 Ruby User’s Guide的简体中文版本:Ruby...继承 重新定义方法 访问控制 单例方法 模块 过程对象 变量 全局变量 实例变量 局部变量 类常量 异常处理:rescue 异常处理:ensure 访问器 对象初始化

    abstract_class:Ruby 中的抽象类

    与模块不同,抽象类可以被继承,并且它们的派生类可以被实例化。 查看或实现以获取其他示例。 安装 gem install abstract_class 要求 Ruby 1.8.7+ 用法 要使类抽象,只需扩展AbstractClass模块即可。 module ...

Global site tag (gtag.js) - Google Analytics