#acl All: == つながったオブジェクトを表示する == オブジェクトの操作を行うまえに、表示のためのメソッドを作っておきます。 ---- === 1つのオブジェクトを表示する === オブジェクトのアドレス(と種類)を表示するには、 オブジェクトを指している変数の値をprintすればよい。 ここで {{{ System.out.println(a); }}} の代わりに {{{ a.show(); }}} と書けるようにするには、つぎのようなshowメソッドを定義すればよい。 {{{ void show() { System.out.println(this); } }}} ---- === どこも参照していないときの値 === Chainクラスのインスタンスはこのような形をしています。 . {{attachment:chain2.png}} 変数nextがどこも参照していないときは、どんな値をとればよいのでしょうか。 この値は . null と決められており、オブジェクト型の変数が作られたときは、 nullで自動的に初期化されます。 次のようなプログラムを実行して確かめることができます。 {{{#!java public static void main(String[] args) { Chain a; a = new Chain(); System.out.println(a.next); } }}} 実行すると {{{ null }}} と表示されます。 ---- === つながったオブジェクトを表示する === showAllという名前のメソッドを作成します。 変数aがChainインスタンスを指しており、 そのインスタンスの変数nextがまた別のChainインスタンスを指しているような場合に {{{ a.showAll(); }}} とすることで、つながっているChainインスタンスをすべて表示するものです。 * Chainインスタンスがつながっている個数は決まっていません。 * 一番後ろのChainインスタンスの変数nextの値はnullになっています。 ---- 変数aが次のようなオブジェクトを参照しているときに . a.showAll() が呼ばれた場合の動作を考えます。 . {{attachment:chain6.png}} メソッドが呼ばれると、呼び出し元の変数の値がthisに渡されます。 . ここではaの値がthisに渡されるのでthisはaが指していたのとおなじオブジェクトを指します。 先に作成した1つのオブジェクトを表示するメソッドshow() . {{attachment:chain7.png}} . {{attachment:chain8.png}} . {{attachment:chain9.png}}