- ベストアンサー
インスタンスNameを文字列で表現するには?
- ObjectインスタンスであるPLAYやSTOPをprintlnメソッドで文字列として表現させるにはどうすればいいのでしょうか?コンソールにPLAY,STOPと表示させたいのですが、そのままprintln(State)とすると訳の分からない文字(→java.lang.Object@239137)が出てきます。
- Sateを操作するメソッドを利用して、ObjectインスタンスのPLAYやSTOPをprintlnメソッドで文字列として表示させる方法を教えてください。
- インスタンスNameを文字列で表示する方法について教えてください。ObjectインスタンスのPLAYやSTOPをprintlnメソッドで正しく表示させる方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>ObjectインスタンスであるPLAYやSTOPをprintlnメソッドで文字列として表現させるにはどうすればいいのでしょうか? これは無理です。Objectクラスのインスタンスである限りは。 println()メソッドの引数にオブジェクト派生クラスのインスタンスを渡すと、そのインスタンスのtoString()というメソッドを呼び出す仕組みになっています。 で、ObjectクラスのAPIリファレンスを読むと。。。 >Object クラスの toString メソッドは、オブジェクトの派生元のクラス名、単価記号 (@)、およびオブジェクトのハッシュコードの符号なし 16 進表現から構成される文字列を返します。 と、「訳の分からない文字」の説明が載っています。 同じく、こうも書かれています。 >toString メソッドはこのオブジェクトを「テキストで表現する」文字列を返します。この結果は、人間が読める簡潔で有益な情報であるべきです。すべてのサブクラスで、このメソッドをオーバーライドすることをお勧めします。 要するにサブクラス(派生クラス)でtoString()メソッドをオーバーライドして「有益な(自らが望む)情報」に書き換えてくださいという事です。 今回の場合でしたら、Play、StopというクラスをObjectの派生クラスとして定義してtoString()メソッドをオーバライドする必要があるという事です。 class Play extends Object { public String toString(){ return "PLAY"; } } class Stop extends Object { public String toString(){ return "STOP"; } } class Test { public static final Object play=new Play(); public static final Object stop=new Stop(); public static void main(String[] args){ System.out.println(play); System.out.println(stop); } }
お礼
質問する前に、JavaDoc.を見ていたのですが、何を言っているのかさっぱり分かりませんでした。takaP-さんに説明して頂いて、ようやく内容を理解できました。有り難うございました。&無事文字列表現もできました。これからもよろしくお願いいたします。