toString() メソッド
CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 41/87。
JavaのすべてのクラスはObjectクラスを継承しており、このクラスはいくつかの便利なメソッドを提供しています。最も一般的にオーバーライドされるメソッドの1つはtoString()で、これはオブジェクトの文字列表現を返します。
デフォルトでは、toString() はクラス名の後にオブジェクトのハッシュコードが続く形式で返しますが、これはあまり役に立ちません:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Person p = new Person("Alice", 25);
System.out.println(p); // Person@15db9742toString()をオーバーライドすることで、オブジェクトの状態を説明する意味のある出力を提供できます:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person[name=" + name + ", age=" + age + "]";
}
}
Person p = new Person("Alice", 25);
System.out.println(p); // Person[name=Alice, age=25]toString()メソッドは、オブジェクトを出力したり、文字列と結合したりするときに自動的に呼び出されます。これにより、余分なコードを書かずにオブジェクトの内容をすぐに確認できるため、デバッグが非常に簡単になります。
チャレンジ
簡単カスタムの toString() 実装を使用して、アイテムに関する意味のある情報を表示する製品在庫システムを構築しましょう。Product クラスを作成し、デフォルトの toString() メソッドをオーバーライドして、各製品の明確で読みやすい表現を提供します。
コードは2つのファイルに分けて構成します:
Product.java: 在庫アイテムを表すクラスを作成します。各 Product は、name(String)、price(double)、quantity(int) の3つの private フィールドを持ちます。これら3つのフィールドすべてを初期化するコンストラクタを含めてください。toString()メソッドをオーバーライドして、次の正確な形式でフォーマットされた文字列を返すようにします:Product[name=X, price=Y, quantity=Z](ここで X、Y、Z は実際のフィールド値です)。価格はプレーンな数値として表示してください(特別なフォーマットは不要です)。Main.java: 製品を作成して表示することで、Product クラスを実際に動かしてみましょう。製品名 (String)、価格 (double)、数量 (int) の3つの入力を受け取ります。これらの値を使用して Product を作成し、System.out.println()を使用して製品オブジェクトを直接出力します。オーバーライドされたtoString()メソッドのおかげで、デフォルトの不可解な出力の代わりに、フォーマットされた製品情報が自動的に表示されます!
製品名 (String)、価格 (double)、数量 (int) の3つの入力を受け取ります。
オブジェクトを直接出力すると、自動的に toString() メソッドが呼び出されることに注目してください。これが、実際のアプリケーションでデバッグやロギングを非常に簡単にする理由です!
チートシート
Javaのすべてのクラスは、Objectクラスを継承します。toString()メソッドは、オブジェクトの文字列表現を返します。
デフォルトでは、toString()はクラス名に続いてオブジェクトのハッシュコードを返します:
Person p = new Person("Alice", 25);
System.out.println(p); // Person@15db9742意味のある出力を提供するために、toString()をオーバーライドします:
@Override
public String toString() {
return "Person[name=" + name + ", age=" + age + "]";
}
Person p = new Person("Alice", 25);
System.out.println(p); // Person[name=Alice, age=25]toString()メソッドは、オブジェクトを出力したり、文字列と連結したりするときに自動的に呼び出されます。
自分で試してみよう
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 入力を読み込む
String name = scanner.nextLine();
double price = scanner.nextDouble();
int quantity = scanner.nextInt();
// TODO: 入力値を使用して Product オブジェクトを作成する
// TODO: product オブジェクトを直接出力する
// (これにより、自動的に toString() メソッドが呼び出されます!)
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
4継承
継承の基本 (extends)super キーワードメソッドのオーバーライド (@Override)コンストラクタチェーンObject クラス単一継承と多段階継承なぜ多重継承ができないのかまとめ:従業員の階層構造7特殊メソッドとObjectクラス
toString() メソッドequals() と hashCode()clone() メソッドcompareTo() と ComparableComparator インターフェースまとめ - カスタムソート