今回は、finalクラスとfinalメソッドについて説明します。
finalメソッド
finalを宣言したメソッドは、拡張クラス(継承した子クラス)でオーバーライドできなくなります。
そのため、finalを宣言したメソッドは、最終(final)のメソッドとなり、拡張できないメソッドとなります。
finalクラス
finalを宣言したクラスは、拡張するクラス(extends)として宣言できません。
また、finalクラスのメソッドは、実質的にfinalメソッドになります。
効果
finalクラスや、finalメソッドを使用することで、安全性の向上させることができます。
また、finalを宣言することによってメソッドやクラスが拡張できませんので、オーバーライドされる心配がなく、そのメソッドの処理が保証(信頼)されます。
注意点
上記のように、finalクラス、finalメソッドは拡張できなくなる制約となりますので、finalを宣言する場合は、「拡張しないことが決定されている」場合のみ宣言しましょう。
また、finalクラスとした場合、クラス全体の拡張ができなくなり、クラスの有用性を制限することにつながります。
finalを使用する場合は、その必要性についても確認しましょう。
実践
finalクラスは宣言せず、finalメソッドを宣言することで、クラス全体をfinalとすることと同じ安全性が得られます。
finalクラスと異なる点は、オーバーライドなどfinalメソッドの拡張は行えなえませんが、メソッドを追加することが可能です。
また、finalメソッドに関わるフィールドを追加する場合は、finalまたはprivateとしましょう。
他のクラスから値が変更できないようにしておかなければ、振る舞いが変更される可能性がでてきます。
finalクラスとするか、finalメソッドとするかは適宜検討し、判断してください。
影響
finalを宣言することで、JVMの最適化が簡単になる。
finalクラスを宣言している場合、処理が早くなる型検査もある。
まとめ
finalの宣言は、
・「拡張させない」ことで
・「安全性の向上」させ
・場合によっては「高速化」
します。
おまけ
定数には、基本的にfinalを宣言します。
安全性の向上や高速化を図るためにもfinalを宣言するべきであるということが分かります。
[定数の定義例]public static final String CONSTANT_A = "test";
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。
コメント