【Java入門】今更聞けないJavaのfinal修飾子とは?final修飾子の使い方を学ぶ
  • facebookページ
  • twitterページ
  • 2019.09.24

    【Java入門】今更聞けないJavaのfinal修飾子とは?final修飾子の使い方を学ぶ

    Javaのfinal修飾子とは?

    finalを翻訳すると「最終」や「最後」のような意味となります。Javaでのfinal修飾子は、この言葉通り 「変更を許さない最後のもの」としてクラスや変数を宣言したい時に使用します。

    final修飾子は、Javaのクラスやメソッド、変数に指定でき、指定する場所によって意味が変わるため、以降で詳しく解説していきます。final修飾子の意味を理解し、保守性が高いプログラムを作りましょう。

    final修飾子を変数に指定した場合

    変更(再代入)が禁止できる

    変数の型の前に、final修飾子を指定すると、後から値が変更(再代入)できないfinal変数が宣言できます。

    final変数に対して後から値を変更(再代入)するようなコードを記述すると、次のようなコンパイルエラーが発生します。

    クラス変数にfinalを指定すると定数になる

    final修飾子をクラス変数に指定すると定数になります。定数にはインスタンスが不要なため、static修飾子と合わせて宣言を行うのが一般的です。

    ポテパンダの一言メモ

    規模大きいシステムや、同じ値を頻繁に使うプログラムの場合、定数を積極的に活用しましょう。定数として宣言しておけば、もし、後からの値を変更する場合があっても、定数の宣言をしている所の値をすれば、その定数を参照しているプログラムすべてに変更した値が反映できます。

    final修飾子をクラスに指定した場合

    次は、final修飾子をクラス付けた場合、どのような意味になるのか解説します。

    継承ができないクラスを作れる

    Javaのクラスにfinal修飾子を指定すると、継承ができないクラスを作れます。

    Javaではクラスの継承を行うことで、親クラスの機能を引継ぎつつ、子クラス側で柔軟に機能の拡張や、親クラスのメソッドの振る舞いを変えることができますが、final修飾子をクラスに指定すると、クラスの継承を禁止することができます。

    final 修飾子がついたクラスを継承すると、次のようなコンパイルエラーが発生します。

    finalクラスの使いどころ(いつfinalにするのか)

    final修飾子が付いたクラスは、継承できないクラスだと解説しました。言い換えれば、finalクラスはそれ以降の改変ができない、最終的なクラスのバージョンともいえます。

    では、finalクラスはいつ使うのでしょうか?これが全てではありませんが、以下にfinalクラスの使いどころの例を挙げていきます。

    【継承連鎖を防ぐ】

    以下は、クラスの継承関係がいくえにも重なったコードの例です。

    上のコードを見ても分かる通り、継承関係が深いため、処理の内容を確認するだけで、複数のクラスのコードを見る必要があり、さらにメソッドのオーバーライドの関係についても把握する必要があります。

    おそらく、このクラスの利用者は、全体像を掴むのに相当な時間を強いられるでしょう。

    クラスの継承は、Javaをはじめとするオブジェクト指向言語の利点ですが、過度な継承構造はコードの保守性を下げるため避けるべきです。適切なところでfinal修飾子をクラスに付け、それ以降のクラスの継承が発生しないように制御しましょう。

    【とりあえずfinal修飾子を付けるのもアリ】

    システム開発では多くの開発者が関わります。そういった時、プログラマーによっては、他人が作成したクラスのコードを編集するのに抵抗があり、安易にクラスを継承したりする事があります。

    継承クラスを作成する前に、元のクラスを編集したほうがよいか検討する必要あるため、そのきっかけとして、クラスにfinal修飾子をとりあえず付けておくのも、1つの案です。

    final修飾子メソッドを指定した場合

    final修飾子はメソッドにも付けられます。メソッドにfinal修飾子を付けると、どのような意味になるのか解説します。

    オーバーライドできないメソッドを作れる

    メソッドにfinal修飾子を付けると、オーバーライドを禁止するメソッドを作ることができます。

    Javaでは、親クラスを継承した子クラス側で、親クラスと同じメソッド名、同じ引数のメソッドを用意すると、親クラスのメソッドを書き換えることができます。final修飾子をメソッドに指定すると、子クラスによるメソッドの書き換えを禁止できます。

    final 修飾子がついたメソッドをオーバーライドすると、次のようなコンパイルエラーが発生します。

    finalメソッドの使いどころ(いつfinalにするのか)

    final修飾子が付いたメソッドは、オーバーライドが禁止であることを解説しました。メソッドにfinal修飾子を付けるかどうは、ネットでもさまざまな議論があり、判断が難しいところですが、以下に、finalメソッドの使いどころの例を挙げていきます。

    【メソッドが完成している事を伝えるとき】

    メソッドの中の処理が完成しており、これ以上の変更の余地がないような場合、final修飾子を付けことで、完成品であることを表現できます。

    【オーバーライドされると問題が発生するとき】

    メソッドの処理を書き換えられると、クラス全体の動作に問題が発生する場合、final修飾子をメソッドに指定して、クラスが安全に動作するようにします。

    Javaのfinal修飾子を使いこなそう

    Javaのfinal修飾子の使い方や、いつfinal修飾子を使うのかについて解説してきました。

    final修飾子の意味を理解し、質の高いプログラムを作って、Javaエンジニアとしてのスキルをアップしていきましょう。

    final修飾子まとめ
    • final修飾子は変数、クラス、メソッドに指定できる
    • final修飾子を変数に指定すると再代入ができない定数になる
    • final修飾子をクラスに指定すると継承を禁止するクラスになる
    • final修飾子をメソッドに指定するとオーバーライドを禁止できる

    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!フリーエンジニアになりたい方向けのコンテンツも盛りだくさんです。

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。年収800万円以上のハイスペック転職をご希望の方は「ポテパンプロフェッショナル」もご用意しておりますのでご利用下さいませ。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料25万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテクラバナー ポテプロバナー

    この記事をシェア

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









    ABOUT US

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

    READ MORE

    ポテパンおすすめ案件