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]