• ベストアンサー

toString()メソッドについて2

toString()メソッドは、自分で設計したクラスで定義しておく(オーバーライドする)とより便利です。「Car@数値」よりももっとわかりやすい文字列を返すようにすることができるからです。 とある本に書いてありますが、オーバーライドするとわかりやすい文字列を返すとは どういう意味でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • hirotn
  • ベストアンサー率59% (147/246)
回答No.3

なぜ、Car@数値と返すのか、以前のQAのコメントの回答と合わせて回答申し上げます。 equals()メソッドの継承について http://okwave.jp/qa/q8231651.html 上記質問では、「ObjectクラスのqeualsメソッドとStringクラスのequalsクラスは(オーバライドしているので)処理が異なる」という回答を致しました。 そこで頂いたコメントですが、 >スーパークラスは必然的に object になるという意味ですか? Javaでは「Yes」になります。lava.lang.Object クラスになります。 Car@数値 というのは、Objectクラスで定義されたデフォルトのtoStringメソッドを実行した結果になっています。 http://docjar.com/src/api/java/lang/Object.java (場所はtoStringで検索してください) しかし、StringクラスのtoStringでは、文字列が返るようになっています。やはりオーバーライドして便利にしているのです。 ですから、CarクラスのtoStringを独自に定義して、車名、車種名、を事由に返すことができるようになるというのが、本の記述にある「より便利」ということなのだと思います。

KAIJI-000
質問者

お礼

継続的な回答有難うございます。学習の参考とさせていただきます。

その他の回答 (2)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

ご自身の質問である,以前のQ&Aのベストアンサーも参照。 toString()メソッドについて http://okwave.jp/qa/q8231630.html ということで。 car1.toString() を呼び出したら既定の機能を通じて「Car@数値」と表示された。これは分かりにくいなあとお感じになったなら。 「Car@数値 というのは○○という意味なんです。こう説明してあげる方が初心者にもうれしいと思ったので,KAIJI-000がこのメッセージ文を作りました」 などといったような,もっとわかりやすい文字列を返すように,自分で設計したCarクラス内で toString()メソッドの機能を新たに上書き(override)しておくとより便利ですよ。と言っているわけです。

KAIJI-000
質問者

お礼

以前との絡みの回答有難うございました。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

たとえば、 public class Car {  private String name;  private double speed;  public Car(String name, double speed) {   this.name = name;   this.speed = speed;  }  public static void main(String[] args) {   Car car = new Car("Chihaya type-B", 72.0);   /* ……なんだかわからない処理…… */   /* ここでのcarの内容を知りたい */  } } というコードがあって、なんだかわからない処理の中でcarインスタンスがどのように変化したかを知りたい場合、toString()がオーバーライドされていない場合はその出力は Car@557e5cbd という感じになります。これではcarに設定されているはずのnameやspeedの値がわかりませんね。そのためいちいちnameとspeedを出力する必要が出てきます。「なんだそれだけか」とお思いでしょうが、そのあと全長を保持するようにCarクラスが変更された時に忘れずに表示部分でも全長を表示しなくてはなりません。 一方、toString()を適切にオーバーライドした場合、例えば @Override public String toString() {  return "Car : name = \"" + name + "\", speed = " + Double.toString(speed); } という風にオーバーライドしているならば、car.toString()を呼び出すだけでcarの内容を知ることができます。さらに、上記の変更があった場合も内容表示のために修正すべき個所はtoString()だけになります。

KAIJI-000
質問者

お礼

早速の丁寧な回答有難うございます

関連するQ&A