広告

手を動かして学ぶ Java入門 (Objectクラス)

環境構築不要! ブラウザから直接コードを実行できます。
本記事では、Java の Objectクラスについて学びます。

10分くらいで、さくっと終わる記事をめざしています。


シリーズ一覧

続きは近日公開予定!

はじめに

この記事は paiza.IO の「Online Java compiler」を利用しています。
2025/2/7 現在、上記環境の Java バージョンは 18 です。(paiza.IO利用ガイド)

実行したコードは paiza.IO で保存および公開されることがあります。
そのため、個人情報などの機密性の高い情報は、コードとして入力しないようにご注意ください。

詳細は paiza.IO の利用規約およびプライバシーポリシーをご確認ください。

Objectクラス

Objectクラスは、クラス階層のルートです。 すべてのクラスは、スーパー・クラスとしてObjectを持ちます。 配列を含むすべてのオブジェクトは、このクラスのメソッドを実装します。

Objectクラスとは、Java言語にとって特別な意味を持つクラスです。
APIドキュメントにあるように、

  • Java のすべてのクラスは Object クラスを暗黙的に継承

しています。

つまり、

public class Sample {
}

↑の Sample クラスと…

public class Sample extends Object {
}

↑の Sample クラスは同じ意味になります。

今までの学習でいろいろなクラスを作ってきましたが、実はすべて 暗黙的に Object クラスを継承していたのです。

暗黙的な継承イメージ

さて、暗黙的に Object クラスを継承することに、なにかメリットはあるのでしょうか?

個人的には、あまりメリットは感じません。
強いていうなら、すべてのクラスは暗黙の型変換で Object 型へと変換できることでしょうか。

どちらかというと、Java 言語仕様の都合によるところが大きいのかな、と感じます。

なので、頭の片隅に置いておくくらいでよいでしょう。

メソッド

Object クラスには、いくつかのメソッドが宣言されています。

もちろん、すべてのクラスでそのメソッドが使えます。
暗黙的に継承しているためですね。

その中でも比較的によく使うのは

  • equals メソッド
  • toString メソッド

あたりでしょうか。

それぞれ簡単にですが、見ていきましょう。

それ以外のメソッドについては Object クラス の APIドキュメントをご参照ください。

equals メソッド

public boolean equals(Object obj)
このオブジェクトと他のオブジェクトが等しいかどうかを示します。

equals メソッドは、指定したオブジェクトが

  • 等しいとき : true
  • 等しくないとき : false

を返します。

例として、文字列クラス(String) で equals メソッドを使ってみましょう。

String s1 = "abc";
String s2 = "XYZ";
String s3 = "abc";

System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));

上記のコード例では、3つの文字列変数 s1, s2, s3 を宣言して比較しています。
さて、どのような結果になるでしょうか?

実際にプログラムを動かして確認してみましょう。
結果がどうなるか予想してから「実行(Ctrl-Enter)」ボタンを押してください。

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

いかがでしたでしょうか? 「出力」のところに

false
true

と表示されたら成功です。

String s1 = "abc";
String s2 = "XYZ";
String s3 = "abc";

s1s2 は違う文字列です。("abc" と "XYZ")
よって、equals メソッドで比較すると結果は false になります。

s1s3 は同じ文字列です。("abc" と "abc")
よって、equals メソッドで比較すると結果は true になります。

今回は Java標準ライブラリの String クラスを例にしてみましたが、他のクラスでも equals メソッドで比較ができます。

【ノート】

自分の作ったクラスで equals メソッドを使いたいときは注意が必要です。
基本的には equals メソッドをオーバーライドする必要があります。

ただ、equals メソッドが必要になることは少ないと思うので、入門記事としては説明を割愛します。
(内容も少々難しいので…)

toString メソッド

public String toString()
オブジェクトの文字列表現を返します。 このメソッドの縮小を満たすと、null以外の結果が返される必要があります。

toString メソッドは、オブジェクトの内容を表す文字列を返します。
プログラムをデバッグするときによく使うメソッドですね。

このオブジェクトの中身はなにかな…?
そんなときは、toString メソッドの戻り値を画面へ表示させて確認することも多いです。

例えば、次のような Sample クラスを考えてみます。

public class Sample {
    private int value;

    public void set(int value) {
        this.value = value;
    }
}

この Sample クラスは、外部から value フィールドの値を知ることはできません。
これでは、デバッグで不便なこともあります。

そんなときは toString メソッドをオーバーライドしてみましょう。

public class Sample {
    private int value;

    public void set(int value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "value = " + value;
    }
}

こんな感じですね。
デバッグ中に value フィールドの値を知りたいときは、toString メソッドを使えば OK です。

また、便利なことに System.out の println にオブジェクトを指定すると、自動的に toString メソッドの結果を表示してくれます。

つまり、

Sample sample = new Sample();
System.out.println(sample);

↑この書き方と、

Sample sample = new Sample();
System.out.println(sample.toString());

↑この書き方は同じ意味になります。

実際にプログラムを動かして確認してみましょう。
結果がどうなるか予想してから「実行(Ctrl-Enter)」ボタンを押してください。

注意:コードは2ファイルあります。上部のタブで切り替え可能です。

タブ

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

いかがでしたでしょうか? 「出力」のところに

value = 123
value = 456

と表示されたら成功です。

応用問題

【問題】

まずは、下記のプログラムをそのまま「実行(Ctrl-Enter)」してみましょう。
結果は次のように表示されたと思います。

Time@5a07e868
Time@5a07e868

これは、toString メソッドのデフォルトの挙動です。

  • クラス名 + @ + オブジェクトを識別する値

という文字列を返します。(最後の値は実行のたびに変わることがあります)

ただ、これでは Time クラスの内容としては分かりづらいですよね。

そこで問題です。

Time クラスの toString メソッドをオーバーライドして、プログラムを実行すると、

14時30分
23時59分

と「出力」に表示されようにしてください。

ちなみに、Time クラスの hour は「時」、minute は「分」を意味します。

それでは Time クラスの toString メソッドをオーバーライドしてから「実行(Ctrl-Enter)」してみましょう。
(修正するのは Time クラスだけです)

注意:コードは2ファイルあります。上部のタブで切り替え可能です。

タブ

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

無事に、

14時30分
23時59分

と出力されましたでしょうか?

もし解けなかった場合は、下記の回答例をご参照ください。

回答例

【コード】

public class Time {
    int hour;
    int minute;

    public void set(int hour, int minute) {
        this.hour = hour;
        this.minute = minute;
    }

    // ここに toString メソッドをオーバーライドしてください。
    @Override
    public String toString() {
        return hour + "時" + minute + "分";
    }
}

※ Main.java は書き換えません。

【出力】

14時30分
23時59分

まとめ

Java のすべてのクラスは、Object クラスを暗黙的に継承しています。
そのため、すべてのクラスは次のことが可能です。

  • 暗黙の型変換で Object 型へと変換
  • Object クラスで宣言されているメソッドを使う

とはいえ、あまり意識しなくてもよいかもしれません。
頭の片隅にでも置いておきましょう。

それでは次回もお楽しみに!


関連記事

ページの先頭へ