然而,要是我们费尽心机编写了一个类之后,又不得不再写去一个功能类 似的全新的类的话,那就很惨了。要是能将已有的类克隆一份,然后在克 隆的类上修修补补,那就好了。而这正是继承( inheritance)的功效。只 是区别在于,如果原先那个类(称为基类 base class,父类 parent cass和超类 superclass)作过了修改,那么这个“克隆”(称为衍生 类,派生类 derived class或者继承类 in herited class或者子类 subclass, child class)也会随之发生变化。 Base Derived (在UML关系图中,箭头从派生类指向基类。你会发现,通常会有不止 个派生类。) 类不仅仅在描述一组施加在对象之上的限制;它还会同其它类发生关系。 两个类可以有一些共通的特征和行为,可能其中有一个比另一个特征更 多,能处理的消息也更多(或者处理的方式不同)。通过基类和派生类的概 念,继承表达了这种相似性。基类保存的是所有继承自它的类的共有特征 和行为。创建基类是为了表达,你对系统中某些对象的核心思想的理解 而衍生类则是从基类派生出来的,它所表达的是各种实现这个核心思想的 方式。 举例来说,有一个对垃圾分类的垃圾回收机。基类是“垃圾( trash)”, 每件垃圾都有重量,价值等等,而且可以切碎,融化或者分解。由它派生 出的一些具体的垃圾品种会有一些额外的特征(瓶子有颜色)或是行为( 罐可以压缩,铁罐可以磁化)。此外有些行为会不同(纸张的价值由它的品 种和状况决定)。通过继承,你能用类构建一个表述你要解决的这个问题 的类系( type hierarchy)。 第二个例子是经典的“ shape”案例。或许它能用于计算机辅助设计系统 或是用来模拟游戏场景。基类是“ shape”,每种形状都有大小,颜色, 位置等属性。从它那里继承下来的具体的形状——圆,矩形,三角形等- —都有额外的特征和行为。比如某些形状可以翻转。有些行为会不同,比 如计算面积的方法。整个类系体现了各种形状之间的相同和不同点。 第9页共34页shhgs@wgqqh.com 9 ✁ ✂ 34 ✁ 9 ;à%Àrq3á«,3×/uüXXÁ«J3×ô;/ Á(cR(/(YÂ,%;ôm(/ÃÄ3ú;Fà Ä(/JïïeeY,à (öK(inheritance)(ôØó ¼F)ÄÅå/Y×/(ÝY/ base classÅ/ parent class {/ superclass)1^,ïðYZ ×Í ÃÄÏ(ÝÆ0 /Ç0/ derived class |öK/ inherited class |/ subclass, child class)[º¸uì0áN (F U M L wË*ÈÉÇ0/UY/¡ºìí·ºmX+ 3×Ç0/) /XÇÇFé3-ÊäF¥VuJ(Èn Aº§A/ì0w e×/ÝEm3Ì:(µòEÝ;§*m3×8®3×µò V;¢¢([V (|¢¢(µ´X)^Y/Ç0/(Ö öKGH, >ÁY/ù(DmöKýA(/(:mµò EY/,GH¡¥w5*´Ì¥V(ËqD|(¢£ àÆ0/0Y/Ç0!Q(ADGH(Úñí ×ËqD|( µ´ BâQ$m3×¥ÌÍ/(ÌÍ~3Y/Í ÌÍ(tra sh )Ï êÅÌÍÆm¨Î--àkÝEÏÐN|£çAÇ0 !(3ÌAT(ÌÍ2ºm3Ì;½(µò(ÑmÒÓ)|E(Ô ÕÝEWÖÕÝE×N)ò½mÌEºX(ØÙ(¨ÎçA(2 ëNO )^öK¡;/Ú3×G¡%£N( × (/w (typ e h i era rch y) ×âõ,(Í sh a p eÏOâ|A;)123Û[1w5 |QîÜÝJdY/Í sh a p eÏêëÆmÂÞÒÓ ¿6-)AYËöKÆQ(AT(ëyyßàL-y yÆm;½(µòE8Ä´ÌëÝE¿mÌEºX8 Ä12¶á(µ¤×/wTí,Úëu4(>XC