オーバーライド
継承に関するもう一つの機能「オーバーライド」を見ていきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
package jp.ayax; public class Main { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ System.out.println("---M処理開始"); M processx = new M(); } } //処理でベースとなるクラス class Base{ public Base(){ process1(); process2(); } //絶対に変更にならない処理1 public void process1(){ System.out.println("process1"); } //絶対に変更にならない処理2 public void process2(){ System.out.println("process2"); } } //X処理 class X extends Base{ public X(){ process3(); process4(); } //X処理独自処理 public void process3(){ System.out.println("process3"); } //X処理独自処理 public void process4(){ System.out.println("process4"); } } //M処理 class M extends X{ public M(){ process5(); } @Override //X処理処理置き換え public void process3(){ System.out.println("process3M"); } //M処理独自処理 public void process5(){ System.out.println("process5"); } } |
1 2 3 4 5 6 |
---M処理開始 process1 process2 process3M process4 process5 |
「さっきのプログラムと何も変わっていませんよ?」新人Cがプログラムを追いながら訴えてきた。
「46行目~49行目のところが追加されています。」
46 47 48 49 |
//X処理処理置き換え public void process3(){ System.out.println("process3M"); } |
「あれ?process3ってクラスXのメソッドですよね。なぜ、クラスMにも書かれているんですか?」
クラスMはクラスXを継承しているので、クラスXのメソッドprocess3が使えます。しかし継承元メソッドの機能を修正したい場合は、そのメソッドの処理を書けば置き換えることができるのです。この場合は継承元(クラスX)のprocess3を修正したいのでクラスMで処理を書いています。
ベテランBを見ると頷きながら微笑んでいるように見える。きっと納得したんだろう。新人Cも目を輝かせている。この再構築は必ず成功するだろうと、A課長は感じた
「継承の機能を使えば、プログラムの再利用可能性が高まり、保守も用意になるはずです。かと言ってこれで全ての問題が解決したわけではありません。難題が出てきたならうまく『やり過ごして』いきましょう!」
「・・・」「・・・」
「やり過ごしちゃって、いいんですか?」
「・・・」
「ダメだろう!」
「はい・・・・」
時は流れ令和の時代になり、A君は定年退職の日を迎えました。全システム再構築の荒波をA君は、無事に乗り越えたのでしょうか。それは別のお話とします。