finalメソッド、finalクラス

今回は、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";

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です