幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 8079|回复: 10

[其他] RUBY 中父类怎么调用子类的方法?

[复制链接]

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2009-7-8 09:32:47 | 显示全部楼层 |阅读模式
RT。。。

都是子继承父
怎么父调用子啊?

我记得似乎是有方法的,求教。。
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2009-7-8 12:52:47 | 显示全部楼层
原来ruby还有这么NB的使用方法... 完全没注意到。
え~え~お!!!
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2009-7-8 13:06:40 | 显示全部楼层
是不是指“接口”这样的做法?子类中的方法要事先在父类中先声明一下。
  1. import tango.util.log.Trace;
  2. class Person
  3. {
  4.     void say(){};
  5. }
  6. class Man : Person
  7. {
  8.     void say()
  9.     {
  10.         Trace.formatln("男");
  11.     }
  12. }
  13. class Woman : Person
  14. {
  15.     void say()
  16.     {
  17.         Trace.formatln("女");
  18.     }
  19. }
  20. void main()
  21. {
  22.     Person a;
  23.     a = new Man;
  24.     a.say();
  25.     a = new Woman;
  26.     a.say();
  27. }
复制代码
ps:目前没装ruby,拿d代替,反正是意思都一样。
え~え~お!!!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-7-8 18:41:23 | 显示全部楼层
哦  哦   大同小异,能看的大概懂

先研究研究,谢谢
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-7-8 19:08:54 | 显示全部楼层
似乎  父类不用定义一个  def aaa  而子类定义了。。。父类能够调用子类的这个方法。。。MS是。。。记不清楚了。。。我研究研究

我也是看RM里的。。Class Game_Event < Game_Character

结果event中的方法  def check_XXXXXXX_touch(x,y)中间的XXX忘记了   Character中没有定义。。。。

结果能调用。。。就在父类中
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2009-7-8 20:48:40 | 显示全部楼层
如果只是要子类定义好方法,父类不用定义就能用,这点D就办不到了。

我觉得ruby也不应该能这样用子类的方法,因为父类不可知道自己有几个子类。

你再查查看,check_xxxxxxx_touch(x,y)这个方法,在Character的父类,父类的父类,父类的父类的父类......里有没有?
え~え~お!!!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-7-8 22:28:13 | 显示全部楼层
我诧异的就在于我全局搜索这个方法,只有在子类中定义过……而且Character没定义父类啊
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2009-7-9 08:42:45 | 显示全部楼层
灵异了,还好我没在玩rm。不 用头疼了。
え~え~お!!!
回复 支持 反对

使用道具 举报

8

主题

215

帖子

2223

积分

⑥精研

积分
2223
发表于 2009-7-19 23:25:51 | 显示全部楼层
你们……那个,Ruby里调用方法的时候不会在意被调用对象是什么“类”的啦,只要有合适的方法定义或继承/mix-in了匹配的方法就OK。

像这样:
  1. class A
  2.   def foo
  3.     bar
  4.   end
  5. end
  6. class B < A
  7.   def bar
  8.     puts 'B#bar'
  9.   end
  10. end
  11. obj = B.new
  12. obj.foo
复制代码

这跟下面的代码其实没啥原理上的区别……
  1. def foo(obj)
  2.   obj.bar
  3. end
  4. class B
  5.   def bar
  6.     puts 'B#bar'
  7.   end
  8. end
  9. obj = B.new
  10. foo obj
复制代码


这就是Ruby的所谓duck typing……
回复 支持 反对

使用道具 举报

8

主题

215

帖子

2223

积分

⑥精研

积分
2223
发表于 2009-7-19 23:26:51 | 显示全部楼层
不要拿静态类型编程语言里的面向对象去套Ruby那样的动态类型的……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-18 11:32 , Processed in 0.022726 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表