|  |  | 
| 在日常生活中,我们对一切对象的分类都是有一定层次的.我们知道所有的猫都是哺乳动物,而所有的哺乳动物又都是动物.小型的类从更大的 类中继承它们的属性.如果一切的哺乳动物要呼吸,那么猫也要呼吸.
 
 在Ruby里,我们可以这样表述这一概念:
 
 
 
| ruby> class Mammal |   def breathe
 |     print "inhale and exhale\n"
 |   end
 | end
 nil
 ruby> class Cat<Mammal
 |   def speak
 |     print "Meow\n"
 |   end
 | end
 nil
 |  
 虽然我们并未指明一只猫要怎样呼吸,但因为Cat是定义为Mammal的子类的(在OO术语里,较小的类叫子类,相比较大的类称父类),每一只猫都将继承来自于Mammal类的行为.因此从程序员的角度出发,猫天生就拥有呼吸这一能力;当我们加上speak方法后,我们的猫就能呼吸,也可以发声了.
 
 
 
| ruby> tama = Cat.new #<Cat:0xbd80e8>
 ruby> tama.breathe
 inhale and exhale
 nil
 ruby> tama.speak
 Meow
 nil
 |  
 也会遇到这样的情况:父类的某些属性不可以被某一特定的子类继承.虽然一般鸟类都会飞,但企鹅是鸟类中不会飞的一个子类.
 
 
 
| ruby> class Bird |   def preen
 |     print "I am cleaning my feathers."
 |   end
 |   def fly
 |     print "I am flying."
 |   end
 | end
 nil
 ruby> class Penguin<Bird
 |   def fly
 |     fail "Sorry. I'd rather swim."
 |   end
 | end
 nil
 |  
 抛开脑尽力疲地为每一个新类定义属性,我们只需要新增或重定义子类和父类之间的区别.继承的这一用法有时也叫做特点编程(differential programming).这是面向对象编程的又一好处.
 |  
|  |  
| 版权声明:RUBY文档中心的所有文章标明[原创]的均为本站作品,版权属RUBY中文化计划,若转载请注明;标明[翻译]的其外文版权归原作者,译文版权属RUBY中文化计划;标明[转贴]的,若原作者感到侵犯了他的著作权,那么请及时跟主持人联系,我们会尽快更正。 |  |  |