class Person
def initialize( name,age=18 )
@name = name
@age = age
@motherland = "China"
end
def talk
puts "my name is "+@name+", age is "+@age.to_s
if @motherland == "China"
puts "I am a Chinese."
else
puts "I am a foreigner."
end
end
attr_writer :motherland
end
class Student < Person
def talk
puts "I am a student. my name is "+@name+", age is "+@age.to_s
end
end
class Worker < Person
def talk
puts "I am a worker. my name is "+@name+", age is "+@age.to_s
end
end
p3=Student.new("kaichuan",25);p3.talk
p4=Student.new("Ben");p4.talk
p5=Worker.new("kaichuan",30);p5.talk
p6=Worker.new("Ben");p6.talk
Worker 类与 Student 类同样继承自 Person 类,亲缘关系是兄弟,当他们 talk
时,能准确表明自己身份,因为他们都重写了各自的 talk方法。 不同的子类继承一个父类,不仅子类和父类的行为有变异,而且子类彼此的行为也有差异,这就是多态。
用“ < ”表示 Student 类是 Person 类的子类。Person 类的一切,Student 类都能
继承。但是 Student 类重写了 talk 方法,所以我们看到了不同的运行结果。子类继
承父类的时候,除了重写方法;也可以添加一些新的方法;或是增强父类的方法(用
关键字 super指明)。
Ruby语言只支持单继承,每一个类都只能有一个直接父类。这样避免了多继承的复杂度。但同时,Ruby提供了mixin的机制可以用来实现多继承。
可以使用super关键字调用对象父类的方法,当super省略参数时,将使用当前方法的参数来进行调用。
class Base
def meth(info)
puts "This is Base #{info}"
end
end
class Derived < Base
def meth(info)
puts "This is derived #{info}"
super
end
end
obj1 = Derived.new
obj1.meth("test")
执行结果为:
This is derived test
This is Base test
如果传入的参数被修改再调用super的话,那么将会使用使用修改后的值。
class Base
def meth(info)
puts "This is Base #{info}"
end
end
class Derived < Base
def meth(info)
puts "This is derived #{info}"
info = "over"
super
end
end
obj1 = Derived.new
obj1.meth("test")
执行结果为:
This is derived test
This is Base over
分享到:
相关推荐
继承与多态:掌握Ruby中的继承机制,了解子类如何继承父类的属性和方法,并实现自己的特定功能。同时,学习多态的概念和实现方式。 三、Ruby Web开发框架 Ruby on Rails介绍:了解Ruby on Rails框架的基本概念和...
它支持类和对象的定义、继承、多态等面向对象的特性,使得开发者能够以面向对象的方式组织和管理代码。 Ruby社区也是一个充满活力的地方,为开发者提供了丰富的资源和支持。从初学者教程到高级编程技巧,从社区论坛...
它支持类和对象的定义、继承、多态等面向对象的特性,使得开发者能够以面向对象的方式组织和管理代码。这种编程方式有助于减少代码的重复和复杂性,提高代码的可维护性和可重用性。 Ruby拥有丰富的标准库和第三方库...
支持类、继承、多态等面向对象概念,并提供了强大的元编程能力。 3. **动态性强**:Ruby 是一种动态类型语言,变量无需事先声明类型,运行时可以动态改变对象的结构和行为。 4. **强大的元编程能力**:Ruby 提供了...
它们允许适当的OOP,多态生成器,,视图继承,使用Rails帮助器,以捆绑JS,CSS或图像,通过gem或Rails引擎进行简单分发,封装测试,以及。 完整文件 Cells是Trailblazer框架的一部分。 可在项目站点上找到。 单元...
W2D3 类继承异常、错误处理分解为对象继承、多态和 DRY 信息隐藏/封装 W2D4 国际象棋独奏项目及调试 W2D5 RSpec 简介RSpec 语法TDD 测试双打主题并让守卫-rspec 实践评估 第 3 周 W3D1 SQL 基础知识格式化 SQL 代码 ...
它类似于 Ruby on Rails 中的单表继承。 每个对象的实际类型存储在数据库中,当检索到该对象时,它会自动转换为正确的模型类。 根据新的BSD许可获得许可。特征查询集中的模型自动具有正确的类对公共基础进行子类化...
目录 自序...........................................4.4 继承..................................................................................................................................34 4.5 多态36
形成OOP的四个主要概念是:抽象,封装,继承和多态。 有很多参考文献讨论OOP并解释其概念。 因此,如果您想更深入地研究这种范式,那么这不是您要找的书。 但是,您仍然可以通过观察编程语言如何处理这些概念来掌握...
主要介绍了Ruby中的模块与混合类型的相关知识,包括平常人们常说的多态与继承等相关知识点,需要的朋友可以参考下
RailsGirls:多态关联和单表继承 此存储库包含名称类似的的基本应用程序。 先决条件 安装了 Ruby 2。 最新版本是 2.1.5,但任何 2.xx 版本都可以。 安装了 Ruby sqlite3 gem。 安装了 Ruby bundler gem。 安装 $ ...
Rails 后端的多态关联和关注点 用于可注释 UI 的本机 Javascript 和 jQuery 方法。 跨节点和元素的 DOM 遍历 智能新配方表单,根据需要添加空白输入。 S3/Papercip 用于图像存储和上传。 Devise 和 CanCan 分别...
1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6 1.3.2 Java程序的运行机制和JVM 6 1.4 开发Java的准备 7 1.4.1 安装JDK 8 学生提问:不是说JVM是...
2) 继承:继承的方法允许在不改动原程序的基础上对其进行扩充,这样使得原功能得以保存,而新功能也得以扩展。这有利于减少重复编码,提高软件的开发效率。 3) 多态:同一操作作用于不同的对象,可以有不同的解释...
19.1 一个较为激进的示例:Ruby on Rails框架中的ActiveRecord库 396 19.2 使用动态特征实现Scala 中的动态调用 397 19.3 关于DSL的一些思考 402 19.4 本章回顾与下一章提要 402 第20章 Scala的领域...
第8章 继承——多态的支柱 122 8.1 继承概述 122 8.1.1 类之间的关系 122 8.1.2 面向对象中的继承性 124 8.2 类的继承 125 8.3 成员变量的继承与隐藏 126 8.3.1 成员变量的继承规则 126 8.3.2 成员...
国内知名的高端IT技术作家,已出版《Spring 2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts 2权威指南》、《Ruby On Rails敏捷开发最佳实践》等著作。 目录: 第0章 学习Java...