哪种实现形式更好?
有两个对象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,看需要在用实现一