凌川__ 发表于 2013-1-27 06:18:06

7.3 糅和(Mix-in) 与多重继承

糅和,也译作混合插入,也许就称作 Mix-in 比较合适。
现实生活中,一个乒乓球不仅是球类物体,也是有弹性的物体。 C++ 支持多重继承,多重继承有时会导致继承关系的混乱,Java只提供了单继承,通过接口可以得到多重继承的优点,又没有多重继承的缺点。Ruby 也是单继承,不是通过接口,而是通过Mix-in 模块,来实现多重继承的优点。
模块的第三个作用:实现了类似多重继承的功能。
我们有一个Student类,有着Person类的属性和方法,还会做数学题——求平方根。已经有了Me模块,只要Mix-in 在Student类里就可以了。
看程序 E7.3-1.rb :
ruby 代码
<div class="dp-highlighter"><div class="bar" />   
[*]#E7.3-1.rb        
[*]     
[*]<span />module Me      
[*]  def sqrt(num, rx=1, e=1e-10)      
[*]    num*=1.0      
[*]     (num - rx*rx).abs    
[*]  end     
[*]<span />end     
[*]     
[*]<span />class Person       
[*]  def talk      
[*]    puts "I'm talking."          
[*]  end        
[*]<span />end     
[*]     
[*]<span />class Student < Person      
[*]  include Me      
[*]<span />end     
[*]     
[*]aStudent=Student.new     
[*]aStudent.talk                # =>  I'm talking.      
[*]puts aStudent.sqrt(20.7,3.3)    # =>  4.54972526643248   
页: [1]
查看完整版本: 7.3 糅和(Mix-in) 与多重继承