[Java]object型は全てのクラスの祖先!object型の型比較などを詳しく解説
  • facebookページ
  • twitterページ
  • 2021.01.22

    [Java]object型は全てのクラスの祖先!object型の型比較などを詳しく解説

    Object型とは

    Object型とは、Javaを含めた多くのオブジェクト指向プログラミング言語で導入されている、すべてのクラスが共通して継承しているルートクラスです。

    Javaでは、継承元のスーパークラスを指定する時は extends句を使用しますが、継承元のクラスを省略した場合は、暗黙的に Objectクラスが継承元になります。

    たとえば、JavaのAPIドキュメントで、ファイルの読み込み時などに使用する BufferedInputStreamクラスの継承階層を見ると、最も基底となるクラスが Object型になっているのが分かります。

    これは BufferedInputStreamクラスに限らず、他のすべてのJavaクラスで同じようになっています。

    どんな方の変数でも入る

    Javaにはサブクラス(継承先)のオブジェクトをスーパークラス(継承元)と同じように扱うことができるアップキャストという機能があります。

    たとえば、次のように Parentクラスを継承した Childがあったとします。

    Childクラスのインスタンスは、継承元 Parentと同じように扱えるため、次のように Parentクラスの型で宣言された変数に、 Childクラスのインスタンスを代入すると、自動的にアップキャストが行われます。

    そして、冒頭でも述べた通り Object型は全てのクラスのルートなる継承元のクラスであるため、 Object型の変数には、どのようなクラスのインスタンスでも格納することが可能です。

    型の情報を取得する

    Object型の変数にクラスのインスタンスを代入(アップキャスト)し、その Object型の変数を他のメソッドに渡した場合、渡された側のメソッドでは、当然 Object型の変数として引数が渡されるため、変数の中身にどのような型のインスタンスが格納されているかが分かりません。

    変数に格納されている値の型情報を取得したい場合、 Objectクラスに定義されている getClass()メソッドを使って取得することができます。

    実際に、先ほど作成した ParentChildクラスのインスタンスを Object型の変数に代入(アップキャスト)して試してみましょう。

    このように、 getClass()メソッドを使用して型の情報を取得するとこができ、たとえば Object型の変数に特定の型のインスタンスが格納された時だけ、処理を行うといったことに使用できます。

    型の比較

    getClass()メソッドで型の情報を取得したら、次はその型が特定のクラス型かどうかチェックする型比較を行ってみましょう。

    型の比較は、数値などの比較でも使用する比較演算子の ==!=を使います。

    継承関係を意識した型の比較

    次に、 getClass()で取得した型が、特定のクラスまたは、そのクラスを継承したサブクラスであるかをチェックする方法を解説します。

    比較演算子の ==!=を使った型比較では、指定したクラスに限定した型比較しか行えないため、継承関係を意識した型比較を行う場合は、 instanceof演算子を使用します。

    次のコードは、変数 obj1Childクラスのインスタンスを格納し、 instanceof演算子で変数 obj1Parentクラスまたは Parentを継承したクラスであるかをチェックする例です。

    さいごに

    Javaの Object型についての解説や、正体不明な型のクラスの型比較を行う方法について紹介してきました。

    アップキャストを使った、継承元(スーパークラス)の方への代入などはよく使うため、是非覚えておきましょう。

    この記事のまとめ
    • Object型はすべてのクラスが共通して継承しているルートクラス
    • Object型の変数には、すべてのクラスのインスタンスが代入できる
    • 型の比較は比較演算子の ==が使える
    • 継承関係を意識した方の比較を行う場合は instanceof演算子を使う

    【関連記事】
    Javaのequalsメソッドの使い方をマスターしよう!==演算子との違いとは?



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE