Oop 继承与组合的区别

Oop 继承与组合的区别,oop,inheritance,terminology,composition,object-composition,Oop,Inheritance,Terminology,Composition,Object Composition,我提取了继承和组合之间的以下区别。我想知道后端对象的创建延迟是什么意思?请找出下面的差异 合成允许您延迟创建后端对象,直到(或除非)需要它们,并在前端对象的整个生命周期内动态更改后端对象。通过继承,您可以在创建子类后立即在子类对象映像中获得超类的映像,在子类的整个生命周期中,它始终是子类对象的一部分,这意味着在有人实际调用使用该对象的方法之前,不必创建类封装的对象。这意味着不必创建类封装的对象直到有人真正调用使用该对象的方法。在继承中,创建子类时会创建超类。 在合成中,对象是在编码者需要时创建的

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


合成允许您延迟创建后端对象,直到(或除非)需要它们,并在前端对象的整个生命周期内动态更改后端对象。通过继承,您可以在创建子类后立即在子类对象映像中获得超类的映像,在子类的整个生命周期中,它始终是子类对象的一部分,这意味着在有人实际调用使用该对象的方法之前,不必创建类封装的对象。

这意味着不必创建类封装的对象直到有人真正调用使用该对象的方法。

在继承中,创建子类时会创建超类。 在合成中,对象是在编码者需要时创建的

这是继承,创建子类时会创建父类,因为子类继承自父类

class Parent {

    //Some code
}

class Child extends Parent{

    //Some code
}
这是组合,对象不是在创建子类时创建的,而是在需要时创建的

class Parent{

    //Some code
}

class Child{

    private Parent parent = new Parent();
    //Some code
}
在这种情况下,创建子类时也会创建父类。下面是另一个在创建子类时不创建对象的合成示例

class Parent{

    //Some code
}

class Child{

    private Parent parent;

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

请注意,在调用createParent之前,父类是如何创建的。

在继承中,父类是在创建子类时创建的。 在合成中,对象是在编码者需要时创建的

这是继承,创建子类时会创建父类,因为子类继承自父类

class Parent {

    //Some code
}

class Child extends Parent{

    //Some code
}
这是组合,对象不是在创建子类时创建的,而是在需要时创建的

class Parent{

    //Some code
}

class Child{

    private Parent parent = new Parent();
    //Some code
}
在这种情况下,创建子类时也会创建父类。下面是另一个在创建子类时不创建对象的合成示例

class Parent{

    //Some code
}

class Child{

    private Parent parent;

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

请注意,在调用createParent之前,不会创建父级。

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

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

简单地说,组合意味着有一种关系,但继承是一种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. 
}

简单地说,组合意味着有一种关系,继承是一种有一种关系

例如,鸡是一种有喙的鸟。下面的代码片段展示了它的工作原理:

/*
* 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. 
}