以下段落引自Bruce Eckel的书"Thinking in Java".
组合具有很大的灵活性.新类的成员对象通常是私有的,这使得使用该类的客户端程序员无法访问它们.这允许您在不干扰现有客户端代码的情况下更改这些成员.您还可以在运行时更改成员对象,以动态更改程序的行为.接下来描述的继承没有这种灵活性,因为编译器必须对使用继承创建的类设置编译时限制.
我不明白,成员对象如何动态更改,以及它如何优于继承.有人可以解释一下
Era*_*ran 11
如果您的课程延伸ArrayList,您班级的用户可以访问所有公共方法ArrayList.您无法更改类以扩展LinkedList,因为这可能会破坏现有代码.
public class Inheritence extends ArrayList<String>
{
// here your class depends on ArrayList implementation
}
Run Code Online (Sandbox Code Playgroud)
另一方面,如果您的类具有类型为的私有成员,则List您的类的用户不能直接调用该成员的方法.您可以在运行时决定是将ArrayList实例分配给该成员,还是分配不同的List实现(LinkedList或其他).
public class Composition
{
private List<String> member;
public Composition ()
{
// here you decide the type of your member during runtime
if (someCondition) {
member = new ArrayList<String>();
} else {
member = new LinkedList<String>();
}
}
}
Run Code Online (Sandbox Code Playgroud)