014 継承(オブジェクトクラスの継承) 037 解答例

public class MyObject {
    @Override
    public String toString() {
        return "This is a MyObject";
    }

    public static void main(String[] args) {
        MyObject myObject = new MyObject();
        System.out.println(myObject); // This is a MyObject
    }
}

この例では、MyObjectクラスがObjectクラスのtoStringメソッドをオーバーライドし、適切な文字列を返しています。mainメソッドでは、System.out.println(myObject)を呼び出すことで、toStringメソッドが自動的に呼ばれて、「This is a MyObject」という文字列が表示されます。

Objectクラスの継承

Javaにおいて、すべてのクラスはObjectクラスを直接または間接的に継承しています。ObjectクラスはJavaのクラス階層の最上位に位置し、以下のようなメソッドを提供しています。

  1. toString(): オブジェクトの文字列表現を返します。通常、クラスごとにこのメソッドをオーバーライドして、オブジェクトの意味のある文字列表現を提供します。
  2. equals(Object obj): 他のオブジェクトと等しいかどうかを判定します。通常、このメソッドもクラスごとにオーバーライドされます。
  3. hashCode(): オブジェクトのハッシュコードを返します。ハッシュコードは、ハッシュテーブルなどでオブジェクトを管理するために使用されます。
  4. getClass(): オブジェクトのクラスを返します。
  5. clone(): オブジェクトのコピーを作成します。
  6. finalize(): オブジェクトがガベージコレクションされる際に呼び出されるメソッドです。ただし、非推奨となっており、代わりにAutoCloseabletry-with-resourcesを使用することが推奨されています。

これらのメソッドは、Javaのクラスが特定の動作をするために利用されます。特に、toStringメソッドはデバッグやログ出力などで頻繁に使用され、クラスごとに適切な文字列表現を提供することが重要です。

toStringメソッド

toStringメソッドは、JavaのObjectクラスに定義されているメソッドの一つであり、オブジェクトの文字列表現を返す役割を果たします。このメソッドは、主にデバッグやログ出力などで使用され、オブジェクトの内容を人が理解しやすい形式で表示するためにオーバーライドされます。

toStringメソッドは以下のように定義されています:

public String toString() {
    // オブジェクトの文字列表現を構築して返す
}

デフォルトのObjectクラスの実装では、クラス名とオブジェクトのハッシュコードの16進数表現が返されますが、通常はこれをクラスごとにオーバーライドして、より意味のある情報を提供します。

例えば、以下はPersonクラスでtoStringメソッドをオーバーライドする例です:

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 + '}';
    }
}

System.out.println メソッドは、引数として与えられたオブジェクトの toString メソッドの結果を出力します。これは、Java言語の標準的な出力手段です。

具体的には、System.out.println がオブジェクトを表示しようとすると、対象のオブジェクトの toString メソッドが呼び出されます。デフォルトの Object クラスでは、toString メソッドはオブジェクトのクラス名とハッシュコードの16進数表現を返しますが、クラスが toString メソッドをオーバーライドしている場合は、その実装が使われます。

上記のPersonクラスの例では、オーバーライドされたtoStringメソッドを使用すると、System.out.println(person)などで直感的な表示が得られます。このメソッドを適切に実装することで、コードのデバッグやログ出力がより効果的に行えるようになります。

「014 継承」問題集リスト