Ruby的多继承

一些程序语言(如C++和CLOS)提供了多重继承机制:一个类可以继承自多个超类。例如,一个House可能继承自一个Building类(连同Office和Hospital类一起)和Residence类(连同Apartment类一起)。尽管多重继承可能成为一种语言强有力的特征,但是由于它会增加该语言的复杂性和歧义,因此许多面向对象语言都没有加入它。

Ruby支持单继承。然而,它还提供了mixin-它提供了多继承的许多特征。一个mixin是一种"模块"类型。为此,你必须首先理解在Ruby中模块的含义。

在Ruby中,模块是一种把方法和常数分组的方式。它与类相似,但是一个模块没有实例并且也没有子类。也许解释模块的最好方法是举一个例子。假定你正在开发一个制造业应用程序。该程序需要存取大量的科学公式和常数,那么你可以或者是创建一个通用类来把这些放在其中或者是创建一个模块。模块的优点在于,在存取其中的公式时,根本没有任何实例扰乱所带来的烦恼。

module Formulas
ACCELERATION = 9.8
LIGHTSPEED = 299792458
def energy (mass)
mass*(LIGHTSPEED**2)
end
def force (mass)
mass*ACCELERATION
end
end

现在,这些公式方法和常数可以被任何数目的其它类或其自身所使用:

irb(main):046:0>Formulas.force(10)
=>98.0
irb(main):047:0≫Formulas::ACCELERATION
=≫ 9.8

注意,为了调用一个模块方法或使用一个模块常数,你必须使用类似于调用一个类方法的标志。为了调用一个模块方法,你需要使用模块类名,后面跟着一个点,再跟着模块方法名。为了引用模块常数,你可以使用模块名,后面跟着两个冒号,再跟着常数名。

除了作为方法和常数的"公共"应用以外,模块还可以帮助定义多重继承。一个mixin是一个简单的"包括"有一个类定义的模块。当一个类包括一个模块时,所有的模块中的方法和常数都成为类的实例方法和常数。例如,假定上面定义的Formula模块作为一个mixin被添加到Rectangle类。为此,你要使用"include"关键字:

class Rectangle
include Formulas
end

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索语言
, 模块
, 方法
, 常数
, 多继承
, 一个
多重
ruby 多继承、多继承的优点与缺点、c中的类支持多继承、支持多继承的语言、多实现和多继承的区别,以便于您获取更多的相关知识。

时间: 2024-08-01 19:28:12

Ruby的多继承的相关文章

《Effective Ruby:改善Ruby程序的48条建议》一第6条:了解Ruby如何构建继承体系

第6条:了解Ruby如何构建继承体系 问题:当你向一个对象发送消息时,你知道Ruby是怎么定位到那个正确的方法的吗?答案看上去很简单:使用继承体系.之所以说答案是看上去简单,因为Ruby构建继承体系是在幕后进行的.这是Ruby用自己的方式来隐藏真正发生的事情的罕见情形之一,它常常带来不必要的困惑.Ruby提供给我们的用来发现继承关系中的类的方法并能完全解释其本质.还好,Ruby解释器在内部构建的继承体系是一致而简单的,只要你明白一些它的技巧. 探索Ruby查询方法的机制将揭开语言实现方式的面纱,

Ruby元编程之梦中情人method

  这篇文章主要介绍了Ruby元编程之梦中情人method_missing方法详解,本文讲解了我该怎么用 method_missing .方法代理.define_method.什么时候用 method_missing.元方法等内容,需要的朋友可以参考下 我最近读了些文章(比如这篇),宣传在 Ruby 里使用 method_missing 的. 很多人都与 method_missing 干柴烈火,但在并没有小心处理彼此之间的关系.所以,我想来探讨一下这个问题: ** 我该怎么用 method_mi

进一步深入Ruby中的类与对象概念

  这篇文章主要介绍了进一步深入Ruby中的类与对象概念,包括集成与多态等更多知识点的整理,需要的朋友可以参考下 Ruby是纯面向对象的语言,所有项目似乎要Ruby中为一个对象.Ruby中的每个值是一个对象,即使是最原始的东西:字符串,数字甚至true和false.即使是一个类本身是一个对象,它是Class类的一个实例.本章将通过所有功能涉及到Ruby的面向对象. 类是用来指定对象的形式,它结合了数据表示和方法操纵这些数据,转换成一个整齐的包.在一个类的数据和方法,被称为类的成员. Ruby类的

Python和Ruby两大语言全方位对比

最近在考虑学习一门后端语言,在Ruby和Python直接犹豫,然后自己做了一些对比,希望能帮到有同样问题的你. 一.异同对比选择 1.Python和ruby的相同点: 都强调语法简单,都具有更一般的表达方式.python是缩进,ruby是类basic的表达.都大量减少了符号. 都是动态数据类型.都是有丰富的数据结构. 都具有C语言扩展能力,都具有可移植性,比perl的可移植性更好.也都可以作为嵌入语言. 都是面向对象的语言,都可以作为大项目的开发工具. 都有丰富的库支持. 也有最宽松的版权许可,

《R和Ruby数据分析之旅》—第1章 1.1节Ruby

第1章 握住探险之鞭--认识Ruby R和Ruby数据分析之旅 <夺宝奇兵>一直是我最喜欢的系列电影.在我年少时,哈里森·福特就是我心中的英雄.我一直很喜欢印第安纳·琼斯抽鞭子的样子.其实正是在<夺宝奇兵>里,我第一次知道鞭子是什么东西. <夺宝奇兵>最早的两部--<法柜奇兵>和<魔域奇兵>中,印第安纳正值壮年,坚定刚毅,脾气暴躁.在我看过这两部之后,心里就对他标志性的帽子和鞭子产生了疑惑--为什么一定要戴那样一顶毡帽,为什么居然要拿一条鞭子?

进一步深入Ruby中的类与对象概念_ruby专题

Ruby是纯面向对象的语言,所有项目似乎要Ruby中为一个对象.Ruby中的每个值是一个对象,即使是最原始的东西:字符串,数字甚至true和false.即使是一个类本身是一个对象,它是Class类的一个实例.本章将通过所有功能涉及到Ruby的面向对象. 类是用来指定对象的形式,它结合了数据表示和方法操纵这些数据,转换成一个整齐的包.在一个类的数据和方法,被称为类的成员.Ruby类的定义: 定义一个类,定义的数据类型的草图. 这实际上并不定义任何数据,但它定义的类名字的意思什么,即是什么类的对象将

Ruby 元编程:第一部分

元编程就是编写能为你编写代码的代码.但那不就是代码生成器所做的事情吗,就像是 rails gem,或者 yeoman?或者甚至是字节码编译器? 是的,但元编程一般指的是 Ruby 中的另外一些东西.ruby 中的元编程指的是能为你动态地编写代码的代码.是在运行时发生的.Ruby 是动态元编程的首要语言,因为它采用了 类型推断 并且是强 发射的 – 相比现有的其它语言处在一个更高的级别.这能让你做一些像使用几行代码就可以加入大量功能这样事情,真的很酷,但是有一个问题:一个不小心,在你提升很多东西的

Ruby的面向对象方式编程学习杂记_ruby专题

打开类 可以重新打开已经存在的类并对之进行动态修改,即使像String或者Array这样标准库的类也不例外.这种行为方式称之为打开类(open class) 猴子补丁 如果你粗心地为某个类添加了新功能,同时覆盖了类原来的功能,进而影响到其他部分的代码,这样的patch称之为猴子补丁(Monkeypatch) 类与模块 Ruby的class关键字更像是一个作用域操作符,而不是类型声明语句.class关键字的核心任务是把你带到类的上下文中,让你可以在里面定义方法. 每个类都是一个模块,类就是带有三个

Ruby元编程之梦中情人method_missing方法详解_ruby专题

我最近读了些文章(比如这篇),宣传在 Ruby 里使用 method_missing 的. 很多人都与 method_missing 干柴烈火,但在并没有小心处理彼此之间的关系.所以,我想来探讨一下这个问题: ** 我该怎么用 method_missing ** 什么时候该抵挡 method_missing 的诱惑 首先,永远不要在还没花时间考虑你用得够不够好之前,就向 method_missing 的魅力屈服.你知道,在日常生活中,很少会让你以为的那样亟需 method_missing: 日常