一、普通方式的继承
Ruby只支持单继承
ruby 代码
- class Child < Father
- ......
- 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,模块的方法会变为类方法。其原理如图:
分享到:
- 2007-05-09 17:44
- 浏览 5486
- 评论(0)
- 论坛回复 / 浏览 (0 / 3856)
- 查看更多
相关推荐
当多个类公用很多方法的时候可以将公用方法部分抽取出来,需要的类做相关继承。 例子: 代码如下: class A ”it was a “ C.new.a #=>”it was a “ 2、抽象类 当多个类要继承一个类时,用第一种方法,会遇到一个...
用 Ruby 写的脚本,可以提取 iOS 项目中的类继承关系。 用法: ruby class_hierarchy.rb path_to_iOS_project 抽取出的类关系会在 Ruby 脚本的当前执行目录下生成 Extracted 文件夹,里面是 JSON 格式的结果文件。...
这个Ruby脚本的目的是从iOS项目中提取出类的继承关系,并以JSON格式导出结果文件。利用这个脚本,我们可以便捷地分析一个iOS项目的类结构。 脚本的工作原理是遍历iOS项目中的所有Swift文件,通过解析语法树来找出类...
主要介绍了Ruby优化继承类实例,本文直接给出一个优化实例及实现代码,需要的朋友可以参考下
Ruby超级继承实验室目标定义两个类,其中一个继承自另一个。 在子类中定义使用super关键字从父类继承并扩充其方法的方法。指示在本实验中,您将编码一个Student类(将成为父类)和一个ChattyStudent类(将从student...
类与对象:理解Ruby中的类和对象的概念,学习如何定义类、创建对象以及使用对象的属性和方法。 继承与多态:掌握Ruby中的继承机制,了解子类如何继承父类的属性和方法,并实现自己的特定功能。同时,学习多态的...
Ruby是一门简洁、灵活而又优雅的...它支持类、继承、封装等面向对象的概念,并提供了丰富的类库和模块,方便开发人员进行面向对象的编程。 4. 生态系统:Ruby拥有活跃的开源社区和丰富的生态系统,提供了大量的库和
主要介绍了Ruby中继承和消息,是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是"一种用于迅速和简便的面向对象编程的解释性脚本语言";这意味着什么?...类,继承,方法,等等 单态方法 模块糅合 迭代器和闭包(closures) 以及: 多精度整数 异常处理模式 动态装载 线程
Ruby 的灵感来源于 Perl、Smalltalk、Eiffel、Ada 和 Lisp 等多种语言,它继承了这些语言的优点,同时增加了自己的特性。 二、安装 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 ...
支持类、继承、多态等面向对象概念,并提供了强大的元编程能力。 3. **动态性强**:Ruby 是一种动态类型语言,变量无需事先声明类型,运行时可以动态改变对象的结构和行为。 4. **强大的元编程能力**:Ruby 提供了...
这是 Ruby User’s Guide的简体中文版本:Ruby...继承 重新定义方法 访问控制 单例方法 模块 过程对象 变量 全局变量 实例变量 局部变量 类常量 异常处理:rescue 异常处理:ensure 访问器 对象初始化
与模块不同,抽象类可以被继承,并且它们的派生类可以被实例化。 查看或实现以获取其他示例。 安装 gem install abstract_class 要求 Ruby 1.8.7+ 用法 要使类抽象,只需扩展AbstractClass模块即可。 module ...