`
凌川__
  • 浏览: 83703 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

4.4 继承

阅读更多
如果我们要写一个学生类,他当然有姓名、年龄、国籍,他也可以talk,但是应该表明身份是学生。看程序 E4.4-1.rb ,接着上一节的代码,添加如下:
ruby 代码
  1. class  Student < Person   
  2.   def  talk   
  3.     puts "I am a student. my name is "+@name+", age is "+@age.to_s   
  4.   end  # talk方法结束   
  5. end  # Student类结束   
  6. p3=Student.new("kaichuan",25); p3.talk   
  7. p4=Student.new("Ben"); p4.talk  

 #=>I am a student. my name is kaichuan, age is 25
      I am a student. my name is Ben, age is 18


用“ < ”表示Student类是 Person类的子类。Person类的一切,Student类都能继承。但是Student类重写了talk方法,所以我们看到了不同的运行结果。子类继承父类的时候,除了重写方法;也可以添加一些新的方法;或是增强父类的方法(用关键字super指明)。
现在说一说new方法。Person类没有定义new方法,为什么生成Person类的具体实例要用new? Ruby语言已经定义了一个类Object,如果你在定义新类的时候,没有指明新类的父类,那么,Ruby解释器认为,新类的父类是Object类。类Object含有new方法、initialize方法…只要你不重写这些方法,你就自然在使用类Object的方法。
从这里,我们发现一个有趣的事实:你写一个类的时候,是在创造一类事物的蓝图;当你new的时候,一个实例就按照蓝图生成了。
一个实例生成了,又一个实例生成了…他们或许是同类型的,或许不是同类型的,或许是有亲缘关系的。无数的实例在代码世界中交互、缠结,忽生忽死,无休无止…
蓝图早已设计好了,new的时候就是出生的时刻,那么,何时消亡呢?这里没有C++的析构函数,也没有Java的finalize( ) 方法,Ruby语言内建了一个比Java更灵巧的垃圾收集器,当某个实例不再与其它代码交互了,垃圾收集器就回收它占用的系统资源,这个实例自然也就不存在了。垃圾收集器是一段代码,它作它的工作,自动地、不知疲倦地随着系统一同运作,并无自己的喜恶。

完整阅读,请看我写的 Ruby语言中文教程all in one    
 

分享到:
评论

相关推荐

    C++入门指南-v2.4.pdf

    4.4 继承时变量与函数名字遮蔽问题 79 4.5 基类和派生类的构造函数 82 4.6 基类和派生类的析构函数 83 4.7 多继承 85 4.8 虚继承和虚基类 88 五、C++多态与抽象类 91 5.1 多态概念介绍 91 5.2 虚函数 92 5.3 纯虚...

    junit4.4的最新版本

    这种模式减少了对继承和接口的依赖,使代码更加简洁。 2. **参数化测试**: JUnit 4.4支持参数化测试,这意味着同一个测试方法可以接受多种参数组合并运行多次。`@Parameters`注解用于提供参数集,`@Test`注解与`@...

    JPA学习笔记

    4.4 继承映射 JPA支持单表继承(InheritanceType.SINGLE_TABLE)、联合继承(InheritanceType.JOINED)和表-per-hierarchy(InheritanceType.TABLE_PER_CLASS)三种继承策略。 ### 五、JPQL(Java Persistence ...

    nopCommerce_4.4功能实现详解.docx

    nopCommerce_4.4 功能实现详解 nopCommerce_4.4 是一个基于 .NET Core 框架的电子商务平台,具有功能强大、灵活性高、可扩展性强的特点。下面将详细介绍 nopCommerce_4.4 的功能实现详解。 基础架构 nopCommerce_...

    Hibernate Annotation Reference

    - **2.2.4.4 继承属性**:子类可以继承超类的映射属性。 #### 2.4.5 关联注解 针对单个关联和集合关联提供了丰富的注解选项,如`@JoinColumn`、`@JoinTable`等。 #### 2.4.6 缓存和过滤器 `@Cache`注解用于实体...

    4.4BSD操作系统设计与实现

    8. **FreeBSD与Linux的关系**:FreeBSD是4.4BSD的一个直接分支,它继承了4.4BSD的很多优秀特性,并在此基础上发展出一套自己的系统。而Linux虽然不是直接从4.4BSD演化而来,但Linux开发者借鉴了许多4.4BSD的设计思想...

    jbpm 4.4 用户指南与开发指南

    jbpm 4.4版本在继承前代优点的基础上,对性能和稳定性进行了优化,同时提供了更丰富的API和工具支持。 二、jbpm 4.4的主要特性 1. **流程建模**:jbpm 4.4支持使用Eclipse BPMN2模型进行流程设计,使得流程图直观...

    ActionScript开发技术大全

    4.4继承 89 4.4.1实现继承 89 4.4.2对象成员的继承 90 4.4.3静态成员继承 93 4.5包 94 4.5.1创建包 94 4.5.2类路径 95 4.5.3使用包 98 4.6订单利润计算示例 99 4.6.1需求分析 99 4.6.2编写代码 100 4.7小结 103 第5...

    Cocos-Creator开发(来自于网络).pdf

    Cocos-Creator开发(来自于网络).pdf ...4.4 继承...................................................................................................................................35 4.5 属性................

    junit4.4 下载

    10. **扩展性**:JUnit 4.4允许开发者通过实现`Runner`接口或继承已有的`BlockJUnit4ClassRunner`来创建自定义的测试运行器,从而扩展JUnit的功能。 压缩包文件“junit4.4”可能包含了JUnit 4.4的JAR文件和其他相关...

    jbpm4.4设计器文档

    jbpm4.4版本的设计器文档主要介绍了基于GEF(Graphical Editor Framework)实现的一个WEB版流程设计器,文档内容覆盖了设计器的设计理念、组成结构、工作流程以及定制化开发和扩展功能等多个方面。 GEF是一个图形...

    bash4.4 pdf

    Bash不仅继承了sh的功能,而且还吸纳了Korn Shell(ksh)和C Shell(csh)的一些有用特性。 2. Bash的版权: Bash的版权归1989-2016年的自由软件基金会所有。这意味着Bash是一个开源软件,遵循自由软件的原则,用户...

    make 4.4 for windows

    make 4.4作为最新版本,不仅继承了传统的功能,还引入了多项改进和优化,例如性能提升、更友好的错误处理和更好的跨平台支持。在Windows环境下,开发者可以通过gnumake.exe这个可执行文件来运行make命令,实现类似...

    锐捷3.3和锐捷4.4

    锐捷4.4版在继承了3.3版的兼容性优势的基础上,进行了升级和优化。同样地,它也支持32位和64位操作系统,确保了新老用户都能得到良好的体验。但值得注意的是,锐捷4.4可能引入了新的特性和改进,比如增强的安全性、...

    java继承例题

    【例 4.4】:私有成员变量继承 在这个例子中,我们定义了两个类:A和B。类B继承自类A,并继承了类A的私有成员变量`i`。在main方法中,我们创建了一个B类的对象,并访问了它的成员变量。 【例 4.5】:super关键字 ...

    JavaScript继承

    4.4 其他继承模式 除了传统的原型链继承,JavaScript还支持其他继承模式,如组合继承(组合使用构造函数和原型链)、寄生继承(通过创建父类副本改进继承)、原型式继承(使用`Object.create()`)、寄生组合式继承...

Global site tag (gtag.js) - Google Analytics