下面的段落引用自 Bruce Eckel 所著的《Thinking in Java》一书。



我不明白,如何动态更改成员对象,以及它如何优于继承。
有人可以解释一下吗

最佳答案

如果您的类扩展 ArrayList ,则您的类的用户可以访问 ArrayList 的所有公共(public)方法。您不能更改您的类来扩展 LinkedList,因为这可能会破坏现有代码。

 public class Inheritence extends ArrayList<String>
 {
     // here your class depends on ArrayList implementation
 }

另一方面,如果您的类具有类型为 List 的私有(private)成员,则您的类的用户无法直接调用该成员的方法。您可以在运行时决定是将 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>();
        }
    }
}

关于java - Java中组合优于继承的优点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41040783/

10-15 13:28