Разница между наследованием и составом - PullRequest
1 голос
/ 02 июля 2010

Я извлек следующую разницу между наследованием и составом. Я хотел знать, что означает задержка создания внутреннего объекта? Пожалуйста, найдите разницу ниже.

Композиция позволяет задерживать создание внутренних объектов до тех пор, пока они не потребуются (и не требуются), а также динамически изменять внутренние объекты в течение всего времени жизни внешнего интерфейса. С наследованием вы получаете изображение суперкласса в вашем изображении объекта подкласса, как только создается подкласс, и он остается частью объекта подкласса в течение всего времени существования подкласса

Ответы [ 4 ]

8 голосов
/ 02 июля 2010

В наследовании суперкласс создается при создании подкласса.В 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.

1 голос
/ 22 декабря 2011

Это также означает, что инкапсуляция родительского элемента не нарушена.Подклассы предоставляют данные родительского класса дочернему классу, тем самым нарушая инкапсуляцию.Композиция позволяет сохранять инкапсуляцию объектов, и обоими объектами можно продолжать управлять отдельно, поэтому изменение данных одного класса не влияет на данные другого класса.

1 голос
/ 02 июля 2010

Все это означает, что объект, который инкапсулирует ваш класс, не нужно создавать, пока кто-то на самом деле не вызовет метод, который использует этот объект.

0 голосов
/ 07 апреля 2019

Проще говоря, Композиция означает отношение 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. 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...