オブジェクト指向プログラミングa 第11回『クラスの継承 (後編)』〜 1.finalメソッド |
【finalメソッド】〜オーバライドを禁じられたメソッド
●本日のメイントピックに入る前に,特定のメソッドのオーバライドを禁止する方法を学習しておく。
・ときには,サブクラスで勝手にオーバーライドされたくないメソッドがある。
たとえば,スーパークラスとそのサブクラスすべてで,同じ動作をさせたいメソッドなどである。
実は,メソッド定義に final とつけると,サブクラスでそのメソッドをオーバライドすることができなくなる。
・下図 List 1 は, メソッドを final指定した場合に,サブクラスでオーバライドしようとしているところでエラーが起きている例である。
・下図 List 2 は,足し算を行うクラスAのメソッド add( ) が,勝手にサブクラスBで掛け算を行うようにオーバライドされて困ってしまった例である。
この問題を解決するには,図にコメントされているように,クラスAの add( )メソッドを final メソッドとして定義してやれば良い。
FinalMethod.java, UnexpectedChange.java
クラスを作るとき,サブクラスで勝手にオーバライドされたくないメソッドは,final メソッドにしておこう。