如果我们要写一个学生类,他当然有姓名、年龄、国籍,他也可以talk,但是应该表明身份是学生。看程序 E4.4-1.rb ,接着上一节的代码,添加如下:
ruby 代码
- class Student < Person
- def talk
- puts "I am a student. my name is "+@name+", age is "+@age.to_s
- end
- end
- p3=Student.new("kaichuan",25); p3.talk
- 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
分享到:
相关推荐
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 纯虚...
这种模式减少了对继承和接口的依赖,使代码更加简洁。 2. **参数化测试**: JUnit 4.4支持参数化测试,这意味着同一个测试方法可以接受多种参数组合并运行多次。`@Parameters`注解用于提供参数集,`@Test`注解与`@...
4.4 继承映射 JPA支持单表继承(InheritanceType.SINGLE_TABLE)、联合继承(InheritanceType.JOINED)和表-per-hierarchy(InheritanceType.TABLE_PER_CLASS)三种继承策略。 ### 五、JPQL(Java Persistence ...
nopCommerce_4.4 功能实现详解 nopCommerce_4.4 是一个基于 .NET Core 框架的电子商务平台,具有功能强大、灵活性高、可扩展性强的特点。下面将详细介绍 nopCommerce_4.4 的功能实现详解。 基础架构 nopCommerce_...
- **2.2.4.4 继承属性**:子类可以继承超类的映射属性。 #### 2.4.5 关联注解 针对单个关联和集合关联提供了丰富的注解选项,如`@JoinColumn`、`@JoinTable`等。 #### 2.4.6 缓存和过滤器 `@Cache`注解用于实体...
8. **FreeBSD与Linux的关系**:FreeBSD是4.4BSD的一个直接分支,它继承了4.4BSD的很多优秀特性,并在此基础上发展出一套自己的系统。而Linux虽然不是直接从4.4BSD演化而来,但Linux开发者借鉴了许多4.4BSD的设计思想...
jbpm 4.4版本在继承前代优点的基础上,对性能和稳定性进行了优化,同时提供了更丰富的API和工具支持。 二、jbpm 4.4的主要特性 1. **流程建模**:jbpm 4.4支持使用Eclipse BPMN2模型进行流程设计,使得流程图直观...
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 ...4.4 继承...................................................................................................................................35 4.5 属性................
10. **扩展性**:JUnit 4.4允许开发者通过实现`Runner`接口或继承已有的`BlockJUnit4ClassRunner`来创建自定义的测试运行器,从而扩展JUnit的功能。 压缩包文件“junit4.4”可能包含了JUnit 4.4的JAR文件和其他相关...
jbpm4.4版本的设计器文档主要介绍了基于GEF(Graphical Editor Framework)实现的一个WEB版流程设计器,文档内容覆盖了设计器的设计理念、组成结构、工作流程以及定制化开发和扩展功能等多个方面。 GEF是一个图形...
Bash不仅继承了sh的功能,而且还吸纳了Korn Shell(ksh)和C Shell(csh)的一些有用特性。 2. Bash的版权: Bash的版权归1989-2016年的自由软件基金会所有。这意味着Bash是一个开源软件,遵循自由软件的原则,用户...
make 4.4作为最新版本,不仅继承了传统的功能,还引入了多项改进和优化,例如性能提升、更友好的错误处理和更好的跨平台支持。在Windows环境下,开发者可以通过gnumake.exe这个可执行文件来运行make命令,实现类似...
锐捷4.4版在继承了3.3版的兼容性优势的基础上,进行了升级和优化。同样地,它也支持32位和64位操作系统,确保了新老用户都能得到良好的体验。但值得注意的是,锐捷4.4可能引入了新的特性和改进,比如增强的安全性、...
【例 4.4】:私有成员变量继承 在这个例子中,我们定义了两个类:A和B。类B继承自类A,并继承了类A的私有成员变量`i`。在main方法中,我们创建了一个B类的对象,并访问了它的成员变量。 【例 4.5】:super关键字 ...
4.4 其他继承模式 除了传统的原型链继承,JavaScript还支持其他继承模式,如组合继承(组合使用构造函数和原型链)、寄生继承(通过创建父类副本改进继承)、原型式继承(使用`Object.create()`)、寄生组合式继承...