組成と継承を見ての広い方法は、組成物は、継承がis-a
関係を実現する技術であるのに対し、has-a
関係を実装するための設計手法です。これをより良い方法で理解するために、オブジェクト指向の視点に移りましょう。私が言う
、Dog
はMammal
とSnake
がReptile
であるが、両方が、デザインは、のようにすることができますと呼ばれるスーパークラスがあるはずAnimals
されているMammal
とReptile
Dog
呼ばAnimal
と2つのクラスSnake
を拡張する必要があります。それぞれのコードは次のとおりです。
public abstract class Animal {
public abstract void move();
public abstract void sleep();
public abstract void reproduce();
}
これらの3つのアクションは、どの動物でも実行できます。
public abstract class Mammal extends Animal{
@Override
public void reproduce(){
System.out.println("Gives birth!!");
}
}
public abstract class Reptile extends Animal{
@Override
public void reproduce(){
System.out.println("Lays Eggs!!");
}
}
すべての哺乳類/爬虫類は、共通の方法でこの定義された機能を実行します。この例で観察することができたよう
public class Dog extends Mammal{
@Override
public void move() {
System.out.println("Uses it's limbs");
}
@Override
public void sleep() {
System.out.println("Sleeps on it's tummy");
}
}
public class Snake extends Reptile{
@Override
public void move() {
System.out.println("Crawls");
}
@Override
public void sleep() {
System.out.println("");
}
}
、Dog
はMammal
とSnake
Reptile
を拡張を拡張します。したがって、時間の任意の時点で、Dog
は常になりMammal
とSnake
は常にReptile
あろう。したがって、このは-の関係は、強い債券を2つのエンティティの間に構築します。実行の過程で、Dog
がMammal
に拡張されている限り、Reptile
またはそれ以外のものにすることはできません。 に戻ってくることは関係(作曲)、持っている
のに対し、私はPerson
は、持っているCar
と言うことができます。この人が持っているCar
の種類を指定していません。これをよりよく理解するために、オブジェクト指向の視点に戻ってみましょう。
このPerson
クラス
public class Person {
private String name;
private String address;
private Car car;
public Person(String name, String address, Car car) {
super();
this.name = name;
this.address = address;
this.car = car;
}
}
考えてみましょうPerson
があり-、という名前、住所、車をここで見ることができます。 車および関連するクラスのコードは以下の行く:
public class Car {
//Car related methods
}
public class Ferrari extends Car{
//Ferrari specific methods, attributes
}
public class Bmw extends Car{
//BMW specific attributes, methods.
}
BMW
とFerrari
がCar
のタイプであることがわかります。 「Person has-a Car」のステートメントに戻ると、その車はどの車でもかまいません。それはフェラーリかBMWか何か他のものかもしれません。これはPerson
オブジェクトの作成中に渡すことができます。
Person john = new Person("John", "#81, 2nd Street,..", new Ferrari());
ジョンがFerrari
Car
にとることがわかります。ここでは、オブジェクト作成(動的な性質)の間にどのようなタイプのCar
も渡すことができます。したがって、その柔軟性のレベルは、has-a(組成)関係によって提供される。
これがあなたの疑いを解消することを願っています。
メンバオブジェクトは参照フィールドから利用でき、それらが変更可能な場合は、割り当てを使用して変更することができます。すなわち、 '=' –
コード例を教えてください。 –
なぜdownvoteですか? –