日期:2014-05-20  浏览次数:20611 次

哪种实现形式更好?
有两个对象A和B,以下哪种实现形式更好?

//实现一
class   A
  {int   id;
    ...
  }
class   B   extends   A
  {byte   data[];
    ...
  }

//实现二
class   A
  {int   id;
    ...
  }
class   B  
  {A   a;
    byte   data[];
    public   A   getA   {return   a;}
    ...
  }

------解决方案--------------------
一般情况下,如果组合可能解决问题,就尽量别用继承。
继承表达的是一种“is-a”的关系,组合表达的是“has-a”的关系。前者所造成的两个类之间的耦合程度要高于后者。
但这只是理论上的普遍情况,针对每一种具体的情况,程序设计者本人应该更清楚哪种更适合。
------解决方案--------------------
同上
------解决方案--------------------
继承和组合都能从现有类型生成新类型。然而,组合一般是 将现有类型作为新类型的底层实现的一部分加以复用,而继承复用接口
一开始设计时,一般应优先选择使用组合,只在确实必要时才使用继承,因为组合更灵活
所以建议先使用实现2,看需要在用实现一