1

継承と構成の次の違いを抽出しました。バックエンド オブジェクトの作成の遅延とはどういう意味ですか? 以下の違いを見つけてください。

コンポジションを使用すると、バックエンド オブジェクトが必要になるまで (およびそうでない場合)、バックエンド オブジェクトの作成を遅らせたり、フロントエンド オブジェクトの存続期間全体にわたってバックエンド オブジェクトを動的に変更したりできます。継承を使用すると、サブクラスが作成されるとすぐにサブクラス オブジェクト イメージ内のスーパークラスのイメージを取得し、サブクラスの存続期間を通じてサブクラス オブジェクトの一部として残ります。

4

4 に答える 4

8

継承では、サブクラスが作成されるとスーパークラスが作成されます。コンポジションでは、コーダーが望むときにオブジェクトが作成されます。

これは継承です。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 クラスも作成されます。以下は、子クラスの作成時にオブジェクトが作成されない構成の別の例です。

class Parent{

    //Some code
}

class Child{

    private Parent parent;

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

createParent が呼び出されるまで親が作成されないことに注意してください。

于 2010-07-02T17:33:29.727 に答える
1

また、親のカプセル化が壊れていないことも意味します。サブクラス化により、親クラスのデータが子クラスに公開されるため、カプセル化が解除されます。コンポジションにより、オブジェクトのカプセル化が維持され、両方のオブジェクトを個別に管理し続けることができるため、1 つのクラスのデータを変更しても、他のクラスのデータには影響しません。

于 2011-12-21T20:48:00.217 に答える
1

つまり、クラスがカプセル化するオブジェクトは、そのオブジェクトを使用するメソッドを誰かが実際に呼び出すまで作成する必要がないということです。

于 2010-07-02T17:23:26.417 に答える
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. 
}
于 2019-04-07T06:24:03.170 に答える