一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

白马非马----继承(我还转)

时间:2008-01-12 编辑:简简单单 来源:一聚教程网

白马非马
                   ----继承
作者:HolyFire
古人云:“白马非马”,为何如是说呢。
这里有个讲究,白马是指一种白色的马,而非马里的马指的是各种各样的马,有黑马,棕吗,五花马等等,这是在颜色上有所区别,马还有产地,品种等等区别。这里给了我们一个启示,各种各样的马可以找出很多共同点,称之为马,符合这些特点的动物就是马了,所以这些共同点不能多也不能少,多了不能同用于所有的马,少了表达不出马来。要区别一只马需要很多信息,比如一只黑色的蒙古马,在这里,我除了描述一只马外,还要指出它是黑色的,产地是蒙古,这里还没有加上马的品种。
我在《芥子须弥-----封装》里曾经提及,事物可以划分成属性和方法的集合。那么我们是不是可以对这个集合进行再加工呢,我们只要在里面加上一点别的什么,那他就可以变成别的事物了,想象一下在马的身上加上鹿的角,呵呵呵呵,可笑吗。那么我们说一些严肃的,知道我们中华民族的图腾吗,龙!龙是在蛇的头上加上鹿的角,身上加上虎的腿脚,尾巴是鱼的尾巴,等等。但是不是随随便便就能造就龙这样伟大的象征的,不好好设计,就会成为画蛇添足。
虽然是简单和相加,但也是有不同的方式的。一般来说有两种方式:关联和衍生。
关联:假设原来的类是用一个袋子将属性和方法包起来,那是用关联描述了多个类之间的关系,最简单的情况就是用一个更大的袋子将两个小袋子包起来,成为一个新的类。这种关联叫做组合。
衍生:衍生呢就是用一个大的袋子将一个小的袋子与一些属性和方法包起来,成为一个新的类


  A

  C

  B



a:关联


  A

  D

b:衍生
我还是用C++来表示一下
class A{
//...属性+方法
};
class B{
//...属性+方法
};
//关联后的新类C
class C{
    A a;
    B b;
};
//衍生后的新类D
class D : public A{
//...属性+方法
};
看起来关联(组合)比较容易理解,即将类作为一个属性,然后形成一个新的类,这和原来类的使用没什么区别,自己定义的类就是一个类型,这正是封装要做的。

热门栏目