質問: "あいう"; System.out.println(h.toString()); ``` 上記の `h.toString()` の部分は `h` のみでも構わないと書籍に記載がありましたが、なぜ、`h` だけで、Aクラスでオーバーライドされた `toString` メソッドが呼び出されるのでしょうか? そういう決まりなのでしょうか? 詳しい方、ご教示ください。よろしくお願いいたします。
回答: まず、System.outは、`System`クラスの標準出力ストリームを保持するフィールドです。 それは`PrintStream`のインスタンスで、println(Object x)を呼び出します。 PrintStream#println の説明にあるように、 > > Object を出力して、行を終了します。このメソッドは、最初に String.valueOf(x) を呼び出して、出力されたオブジェクトの文字列値を取得します。次に、print(String) を呼び出してから println() を呼び出すのと同じように動作します。 > > > それで、これ(`println`)は、String.valueOf(x)を呼び出します。 > > 引数が null の場合は "null" に等しい文字列。それ以外の場合は obj.toString() の値が返される。 > > > それで、`String.valueOf`で、`obj.toString()`が呼び出されるので期待の動作(オーバーライドされたtoStringメソッドが呼び出される)をする。というわけです。