`

ruby的 继承和多态

 
阅读更多
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编码规范

    类变量在Ruby中以`@@`前缀表示,它们是属于类或模块的共享变量,不会被类的实例所继承。这意味着,所有的类实例都可以访问同一个类变量,但它们之间不会互相影响。例如: ```ruby class MyClass @@class_var = ...

    10.5 多态、为什么ruby、ruby编码规范.rar

    综上所述,Ruby的多态性是其魅力的一部分,它提供了灵活性和代码复用,而Ruby编码规范则帮助开发者编写出更易读、易维护的代码。了解并掌握这些知识点,对于深入理解Ruby编程以及提升编程技能至关重要。

    Ruby语言教程.docx

    继承和多态:掌握继承的概念,以及如何通过多态实现接口和抽象类。 模块和混合: 学习如何使用模块来组织代码,以及如何使用混合(mixins)来重用类的方法。 异常处理: 了解如何使用begin-rescue-ensure-end语句来...

    Ruby编程语言入门指南与实战应用

    首先介绍了如何在不同操作系统上安装Ruby,接着讲述了变量、数据类型、控制结构、方法定义等基础语法,随后深入解析了面向对象编程中的类、对象、继承和多态概念。接着,探讨了Ruby中常用的模块和库,如何通过gem...

    Ruby 编程语言基础与进阶案例解析

    ② 掌握面向对象编程的关键概念如类、继承和多态;③ 了解模块混入的概念及其在代码组织中的优势;④ 熟悉常见的文件读写操作及错误处理方式;⑤ 认识并运用元编程提高代码灵活性和扩展性。 其他说明:文中提供的...

    ruby实用函数和实例

    模块可以用来封装相关的函数和常量,避免命名冲突,类则是面向对象编程的基础,通过继承和多态,可以构建复杂的应用架构。 最后,Ruby的Gem生态系统提供了大量预包装的库,如ActiveRecord(数据库操作),Sinatra...

    Ruby语言教程知识点详解 ruby重点知识点总结掌握.docx

    8.继承与多态 9.异常处理 10.文件与I/O操作 11.Ruby标准库与常用Gem 12.Ruby on Rails简介(扩展内容) 一、Ruby语言简介与安装 重点详细内容知识点总结 Ruby简介:Ruby是一种简洁、优雅且面向对象的编程语言,以...

    编程语言发展史:Ruby语言的发展和应用

    * Ruby是一种面向对象语言,它支持封装、继承和多态等面向对象的特性。 * Ruby支持代码块和迭代器,使得编写简洁的代码变得更加容易。 * Ruby的语法非常灵活,可以使用多种编程风格编写代码。 * Ruby的核心库非常...

    Ruby完全自学手册

    2. 面向对象编程:类与对象、继承、多态、封装、模块等。 3. 高级特性:块(Block)、迭代器(Iterator)、元编程、反射等。 4. 标准库的使用:文件操作、网络编程、正则表达式处理等。 5. Ruby on Rails框架的学习...

    ruby 中文文档 必备资料

    Ruby还支持继承、多态和模块,使得代码可以高度模块化和可复用。 在函数和方法方面,Ruby允许自定义函数和方法,方法可以作为参数传递,也可以返回。块(block)和 Proc 对象是Ruby的独特之处,它们可以用来实现...

    Ruby语言介绍.doc

    它拥有强大的面向对象编程特性,如类、对象、继承、多态和封装等。 二、Ruby基础语法 变量:Ruby使用标识符来命名变量,变量名以字母或下划线开头,可以包含字母、数字和下划线。Ruby是动态类型语言,变量的类型在...

    Ruby编程Ruby Programming

    这本面向初学者和高级读者的指南旨在全面介绍Ruby编程语言的基础及其高级特性,因此我们将从多个角度来解析这些内容。 ### 一、Ruby编程语言简介 #### 1.1 Ruby语言的历史与发展 Ruby是一种动态、面向对象的脚本...

    Ruby工具 windows 环境

    Ruby支持面向对象编程,类、对象、继承、多态等特性一应俱全,同时也提供了函数式编程的一些特性,如高阶函数和块。 在Windows上编写Ruby脚本,可以使用任何文本编辑器,如Notepad++或Visual Studio Code,并保存...

    Ruby新手学习书(Ruby语言中文教程)和Rails_4_days

    4. **面向对象编程**:Ruby是一种纯面向对象的语言,你将学习类、对象、继承、模块、封装和多态等核心概念。 5. **异常处理**:学习如何使用begin/rescue/ensure来捕获和处理程序运行时可能出现的错误。 6. **元...

    全面详解Ruby编程语言,从入门到高级实战

    接着详细讲解了变量、数据类型、控制流、方法与函数等基础语法,以及类、对象、继承、多态、模块等面向对象编程知识。随后介绍了块与 Proc 、异常处理、反射与元编程等高级特性。最后通过一个简单的博客系统案例展示...

    Ruby的教程.txt

    随后,我们将深入面向对象编程,探讨类、对象、继承和多态。了解了基础语法和面向对象编程后,我们将转向Ruby Web开发框架,特别是Ruby on Rails,学习其安装、配置以及项目创建和管理。 1. Ruby基础语法 Ruby的...

    Ruby 编程语言的书籍

    - **继承与多态**:探讨继承机制,以及如何实现多态性来增强代码的灵活性。 - **封装与访问控制**:讲解如何合理地隐藏对象的内部状态,保护数据安全。 5. **异常处理**:介绍异常的基本概念,以及如何使用`begin...

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

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

Global site tag (gtag.js) - Google Analytics