继承与构成之间的区别

时间:2010-07-02 17:22:15

标签: oop inheritance terminology composition object-composition

我已经提取了继承和组合之间的以下区别。我想知道后端对象的创建延迟意味着什么?请找到以下差异。

组合允许您延迟后端对象的创建,直到(并且除非)它们被需要,以及在前端对象的整个生命周期中动态地更改后端对象。通过继承,您可以在创建子类时立即在子类对象图像中获取超类的图像,并且在子类的整个生命周期中它仍然是子类对象的一部分

4 个答案:

答案 0 :(得分:8)

在继承中,在创建子类时创建超类。 在Composition中,对象是在编码器想要的时候创建的。

这是继承,当创建Child类时,父进程被创建,因为子进程从父进程继承。

class Parent {

    //Some code
}

class Child extends Parent{

    //Some code
}

这是组合,创建子类时不会创建对象,而是在需要时创建它。

class Parent{

    //Some code
}

class Child{

    private Parent parent = new Parent();
    //Some code
}

在这种情况下,还会在创建Child类时创建Parent类。下面是在创建子类时没有创建对象的Composition的另一个示例

class Parent{

    //Some code
}

class Child{

    private Parent parent;

    public Child()
    {
    }
    public void createParent()
    {
         parent = new Parent();
    }
}

注意在调用createParent之前不会创建父项。

答案 1 :(得分:1)

所有这意味着,在某人实际调用使用该对象的方法之前,不必创建类封装的对象。

答案 2 :(得分:1)

这也意味着不会破坏父级的封装。子类将父类的数据公开给子类,从而打破了封装。组合允许对象封装持久化,并且两个对象可以继续单独管理,因此更改一个类的数据不会影响其他类数据。

答案 3 :(得分:0)

简单地说,组成表示HAS-A关系,而继承是IS-A关系。

例如,鸡是鸟,有喙。因此,以下代码段显示了其工作原理:

/*
* Parent class for Chicken.
*/
class Bird {
    ...
    //code
}  

class Beak {
    ...
    //code
} 

/* 
* As Chicken is a bird so it extends the Bird class. 
*/
class Chicken extends Bird { 

      private Beak beak; // Chicken has a beak so, Chicken class has an instance of Beak class. 
}