`
凌川__
  • 浏览: 82294 次
  • 性别: 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 纯虚...

    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...

    Ruby语言入门教程

    目录 自序...........................................4.4 继承..................................................................................................................................34 4.5 多态36

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

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

    4.4BSD操作系统设计与实现

    BSD Unix分支的经典版本,是研究unix操作系统内核的基础,后续分支如FreeBSD、Linux都从该版本继承或借鉴了很多设计思想

    TreeSizeFreeSetup-4.4.2.514+硬盘空间管理工具+win桌面工具

    除了可以在资源管理器中方便的切换到TreeSize Free,反之也可以哦,因为在TreeSize Free中的右键菜单中也继承了“资源管理器”菜单项。 3、能够对文件和文件夹进行删除、复制、剪切等管理操作,也可以使用拖放。...

    C++编程思想习题

    4.4含有构造函数和析构函数的stash 4.5含有构造函数和析构函数的stack 4.6集合初始化 4.7缺省构造函数 4.8小结 4.9练习 第5章 函数重载与缺省参数 5.1范围分解 5.1.1用返回值重载 5.1.2安全类型连接 5.2重载的例子 ...

    c++教案 ==========

    4.4标识符的作用域· 8 4.4.1作用域· 8 4.4.2局部变量与全局变量· 9 4.5变量的生存期· 9 第五章 类与对象· 10 5.1类的引入· 10 5.1.1循环计数器· 10 5.1.2讨论· 11 5.1.3类· 11 5.2 类的定义·...

    开学了,有路网团购太便宜啦! C++编程惯用法(高级程序员常用方法和技巧)/深入C++系列(C++ Strategies and Tactics)

    4.4 保护型继承 4.5 与基类抽象的一致性 4.6 纯虚函数 4.7 有关继承的细节和陷阶 4.8 小结 4.9 问题 第5章 多重继承 5.1 作为交集的多重继承 5.2 虚基类 5.3 一些有关多重继承的细节问题 5.4 小结 5.5 问题 第6章 ...

    Spring 3 Reference中文

    4.7 Bean 定义的继承. 77 4.8 容器扩展点. 78 4.8.1 使用BeanPostProcessor 来自定义bean 78 4.8.1.1 示例:BeanPostProcessor 风格的Hello World.. 79 4.8.1.2 示例:...

    Objective-C基础教程 中文 PDF 清晰版 [31M]

    4.4 重写方法55 4.5 小结57 第5章 复合58 5.1 什么是复合58 5.1.1 Car程序58 5.1.2 自定义NSLog()59 5.2 存取方法62 5.2.1 设置发动机的属性64 5.2.2 设置轮胎的属性64 5.2.3 跟踪汽车的变化66 5.3 扩展...

    vc++6.0 程序设计学与用教程

    4.4 位运算符 4.5 赋值运算符 4.6 字符串运算符 4.7 扩展赋值运算符 4.8 条件运算符 4.9 其他运算符 4.10 表达式 4.11 注释 第5章 流程控制语句 5.1 结构化程序设计的3种基本流程 5.2 选择语句 5.3 ...

    传智播客_C++基础课程讲义_v1.0.7

    4.4变量检测增强 6 4.5 struct类型加强 6 4.6 C++中所有的变量和函数都必须有类型 6 4.7新增Bool类型关键字 6 4.8三目运算符功能增强 6 5 C/C++中的const 6 1 const基础知识(用法、含义、好处) 6 2 C中“冒牌货” ...

    Think in ActionScript 3.0Ⅰ Ⅱ Ⅲ汇总

    4.4 内存分析 4.5 this 和 super 关键字 4.5.1 TestSuper.as —— this 和 super 以及 override 4.5.2 this 和 super 的内存分析 4.5.3 TestThis.as —— 用 this 区分局部变量与成员变量 4.6 初始化顺序 4.7 静态...

    hibernate annotation帮助文档

    2.2.4.4. 从父类继承的属性 2.2.5. 映射实体Bean的关联关系 2.2.5.1. 一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2...

    深度探索模C++对象模型PDF

    4.4 指向Member Functions的指针(Pointer-to-Member Functions) 支持“指向Virtual Member Functions”之指针 在多重继承之下,指向Member Functions的指针 “指向Member Functions之指针”的效率 4.5 Inline ...

    深度探索C++对象模型 超清版

    4.4 指向Member Functions的指针(Pointer-to-Member Functions) 支持“指向Virtual Member Functions”之指针 在多重继承之下,指向Member Functions的指针 “指向Member Functions之指针”的效率 4.5 Inline ...

    python教程学习路线学习教程

    4.3继承 4.4模块 第5章数据处理 5.1文件I/O 5.2JSON 和xml 解析 5.3csv 和excel 的高效解析 5.4异常 第6章数据库 6.1数据库连接 6.2数据库查询 6.3数据库的数据更新操作 6.4数据库操作的封装 第7章Python Web 7.1...

    Java完美编程(第3版).pdf

     4.4 构造方法   小结   自测题参考答案   编程项目 第5章 类的定义(2)  引言   前导知识   5.1 静态方法和静态变量   5.2 引用和类参数  5.3 引用的使用和滥用   5.4 包和javadoc  小结...

    mfc教程(word版)

    1.1.2 继承 2 1.1.3 虚拟函数和动态约束 2 1.1.4 MFC的宏观框架体系 2 1.2 MDI应用程序的构成 3 1.2.1 构成应用程序的对象 3 1.2.2 构成应用程序的对象之间的关系 5 1.2.3 构成应用程序的文件 5 第2章 MFC和Win32 9 ...

Global site tag (gtag.js) - Google Analytics