Java : final class, final method
Javaには、finalという指定子がある。これは、変数に使えば、その変数に代入できない(一度束縛したら、変更できない)ということを意味しているのだけれど、メソッドやクラスにもfinal指定子をつけることができる。
メソッドやクラスにfinalが付けられると、それはオーバーライドできないということを意味するのだけれど、そのメリットはなんだろうか?
http://java-house.jp/ml/archive/j-h-b/000088.htmlによれば、
サブクラスがないので、そのクラスで定義されたメソッドのメソッド呼び出しをnonvirtualinvokeとすることができます。しなくても動くので、javaコンパイラによってはしないままにすることもできると思います。
nonvirtualinvokeの方がすこしだけ呼び出しコストが安いと予想されるので、実行速度が速いのではないでしょうか?
ということらしい。
-
-
- -
-
(追記)
何か勘違いしている人が多いらしいが、finalがオーバーライドを禁止していることそのものの意味くらいはわかっているつもりですよ。
それに、引用した質問の署名くらい確認してから突っ込みを入れたほうがいいと思うぞ。