ruby 的多态
来源:互联网 发布:阿里云免费网站空间 编辑:程序博客网 时间:2024/06/05 22:35
ruby是一个面向对象的语言,属于面向对象的一些特点肯定都会具备。在java中多态有两种表现方式,一种在一个类中,相同的方法名,参数不相同,另一种是子类和父类中,子类覆盖父类的方法。
1.ruby中有方法的重载吗?
class Box # constructor method def initialize(w,h) @width, @height = w, h end # instance method def getArea @width * @height end def getArea(w,h) @area = w* h endendbox = Box.new(6,7);$area1 = box.getAreaputs("one is #$area1")$area2 = box.getArea(8,9);puts("two is #$area2")这段代码报错,如下:
box.rb:10:in `getArea': wrong number of arguments (0 for 2) (ArgumentError)
from box.rb:16:in `<main>'
也是调用方法box.getArea传递的参数不对,我们把
$area1 = box.getAreaputs("one is #$area1")这两行代码注释掉,程序正常,同样我们将getAea(w,h)和方法getAea前后位置换一下,我们需要注释掉下面两行代码才能正常运行,如此看来ruby并不支持方法的重载。
ruby为什么不知道方法的重载呢?
ruby有这样一种特性,它支持方法的参数的可变性
class ParamSample def sayHello(*names) puts names.class puts "Hello #{names.join(",")}!" end endps = ParamSample.newps.sayHello #output Array Hello !ps.sayHello("wlb","xqh","ssl") #output Array Hello lee,snake!从结果看到names.class 是一个Array,我们在加个时间类呢
class ParamSample def sayHello(*names) puts names.class puts "Hello #{names.join(",")}!" end endps = ParamSample.newtime2 = Time.nowputs "Current Time : " + time2.inspectps.sayHello #output Array Hello !ps.sayHello("wlb","xqh",time2) #output Array Hello lee,snake!结果和java中的重载几乎没有区别,这是不是就是ruby放弃重载的原因呢??????
2.ruby的覆盖
class Car def myname puts "我是一辆车" end def run puts "我准备奔跑了" endendclass Baoma < Cardef myname puts "我是一辆宝马" endend car = Baoma.newcar.mynamecar.run
ruby没有没有抽象,没有接口,但在学之前一直听说ruby是多继承的,这又从何而来呢?我想这应该和moudle有关吧!
这个问题留到下午,现在在解决一个小问题。
- ruby 的多态
- Ruby的多继承
- ruby中的多态
- 什么是Ruby Ruby的简介
- Ruby基础知识-Ruby的特性
- Ruby基础知识-Ruby的数据类型
- [Ruby] Ruby 的hash默认值
- ruby如何替换字符串的多个?
- Ruby 101:重用、隐藏和多态
- ruby基础系列-ruby字符串对象使用单引号与多引号输出的区别与共同点
- Understanding Ruby Symbols(Ruby标识符的理解)
- ruby: 如何测试ruby的执行效率?
- [Ruby学习总结]Ruby语言的语法
- Ruby之欢迎来到Ruby的世界
- Ruby基础知识-Ruby的基本语法
- Ruby基础知识-Ruby的数据类型-HashMap
- Ruby的popen--《PROGRAMMING RUBY》读书笔记
- Ruby学习-Ruby语言的一些特点
- MySQL数据库调优之四
- VC++ MFC橡皮筋技术
- 强大的async.auto!
- C/C++中如何嵌入汇编
- 快排中注意的小细节
- ruby 的多态
- 音视频应用技术(即时通讯)
- Spring简介
- Ubuntu12.04歌词显示osd-lyrics 和 解决播放器乱码
- python日志输出—logging直接代码配置
- SDC中添加一个对话框到主视图
- CRC测试代码
- Android3.0以上的Fragment的使用及原理
- String与InputStream相互转换