>>712
>>707をもっと丁寧に書いてみたお。

public class Hoge {
  private Foo foo = null;

  public Hoge(Foo foo) {
    this.foo = foo;
  }

  public void method() {
    ・・・
    foo.bar(); // HogeからFooに必要な処理を委譲
  }
}

  ・・・
  Hoge hoge = new Hoge(foo); // 「Hoge -> Foo」の関係を定義
  hoge.method();


これで、Hoge -> Fooの関係を極めて明瞭にモデル化できるわな。
(getterとかどこにも書いていないことに注意)

こういう手法のメリットは、一度Hogeを作ってしまえば、後は「HogeはFooを使っている」ということを
オブジェクトを使う側は全く意識する必要がないこと。もちろん、Fooの実装はポリモで扱える。
単体オブジェクトの単純な一対一なら記述量が増えるだけで大してメリットはないが、
こういう関係が幾重にも重なったり、一つのクラスに属するオブジェクトが多数登場するような状況で威力を発揮する。

一方で、そもそもobject1.method(object2)と記述するとしても、別に問題はないけどな。
それをもって「OOPは複数の対象物間の関係を記述するのが苦手」とか言われても意味が分からん。