首先看下他们的关系
- irb(main):100:0> String.class
 - => Class
 - irb(main):101:0> String.class.superclass
 - => Module
 - irb(main):102:0> String.class.superclass.superclass
 - => Object
 
class < Module < Object
1、类 只能单继承,但是可以包含多个模块
module AA    
  def AA.prints1(str)     
    print "A:"+str     
  end     
end
   
module BB     
  def BB.prints2(str)     
    print "B:"+str     
  end     
end 
class CC    
  include AA     
  AA.prints1("aa")     
  include BB     
  BB.prints2("bb")     
end
2、模块 就和c#接口类似,包含一些公共接口方法,无法实例化
类调用模块的两种方式
A.rb 在方法前加 模块名.方法名 (AA.prints1) , 在其引用类中就可以直接调用 AA.prints1
module AA    
  def AA.prints1(str)     
    print "A:"+str     
  end     
end
B.rb 如果没有加模块名则需要在其引用类中添加 include BB把方法包含进引用类中,相当于继承了方法,然后就可以直接调用了prints2
module BB    
  def prints2(str)     
    print "B:"+str     
  end     
end 
                    
                
                
            
        
浙公网安备 33010602011771号