オブジェクト指向プログラミングa 第11回『クラスの継承 (後編)』〜  1.finalメソッド


【finalメソッド】〜オーバライドを禁じられたメソッド

●本日のメイントピックに入る前に,特定のメソッドのオーバライドを禁止する方法を学習しておく。

・ときには,サブクラスで勝手にオーバーライドされたくないメソッドがある。
 たとえば,スーパークラスとそのサブクラスすべてで,同じ動作をさせたいメソッドなどである。

実は,メソッド定義に final とつけると,サブクラスでそのメソッドをオーバライドすることができなくなる。
・下図 List 1 は, メソッドを final指定した場合に,サブクラスでオーバライドしようとしているところでエラーが起きている例である。
・下図 List 2 は,足し算を行うクラスAのメソッド add( ) が,勝手にサブクラスBで掛け算を行うようにオーバライドされて困ってしまった例である。
  この問題を解決するには,図にコメントされているように,クラスAの add( )メソッドを final メソッドとして定義してやれば良い。

FinalMethod.java, UnexpectedChange.java

クラスを作るとき,サブクラスで勝手にオーバライドされたくないメソッドは,final メソッドにしておこう。