はじめての継承

システム最構築

平成の時代になりA君も課長へ昇進していました。そして全システム再構築の指揮を取ることになったのです。あらためてシステムの概要を確認すると、プログラム数が500本ほどありまます。もちろんこの中にはA君が作成したX,Y,Zプログラムも健在です。そして、プログラムがどのような関係にあるのかベテラン課員しかわからなくなっており、プログラムを保守するのさえ困難な状況でした。

「Java、オブジェクト指向だな」A君が決断しました。再構築の方針をオブジェクト指向を導入し、プログラムの再利用可、保守性の向上としたのです。早速、課長であり技術リーダーであるA君がプロトタイプのプログラムを作成しました。

extends

こちらのソースコードで注目して欲しいのは、11行目,26行目です。

プログラム(クラス)BaseとXが定義されています。そして26行目の「extends Base」でプログラムXはプログラムBaseを継承します。継承することで、プログラムXはプロクラムBaseのメソッド( process1、 process1)や変数を利用できます。

つまり、プログラムBaseは、共通処理ということ?


ベテランのBはオブジェクト指向の導入に懐疑的なためか勉強会の最中、不満顔でA課長に聞いてきました。


はい。今はそのようなイメージでいいです。

トレース

確認のためプログラムをトレースしていきます。最初に動くのは、クラス(プログラム)Mainです。そして6行目で処理開始を表示しています。

7行目でクラスXを使えるようにして(new X())、変数processxに格納しています。

プログラムを変数にして意味あるの?

ベテランBが不思議そうに聞いてきます。


変数を利用してメソッド(関数)を起動したりできます。例えばこんな感じです。」A課長がホワイトボートへ書き込みます。

これで柔軟にプログラムを制御できるのです。


実行結果を見るとクラスXなどのメソッドが実行されているようなんですが、クラスMainで記述が見当たらないんです?」新人のCが尋ねてきました。

はい。ではトレースを進めていきましょう。

7行目でクラスXが使えるようになりますが、それと同時にクラスXの一部のプログラムが実行されます。それが26行目~29行目です。

メソッドの記述をしていますが、このメソッドはクラス名(X)と同じ名前になっています。クラス名と同名のメソッドは、クラスを使えるようにした時に実行される特殊なメソッドなのです。

つまり、7行目でクラスXをnewしているので、クラスのメソッドXが実行されるのですね。


はい。そうです。


でも、実行結果を見るとクラスBaseのprocess1、process2も動いているんだが?


クラスXはクラスBassを継承しているので、クラスBassの特殊なメソッド、Bassも同時に動きます。

ベテランBも新人Cも納得したようです。ちなみにクラスをnewして使えるようにすることを「インスタンス化」、newした時に実行される特殊なメソッドを「コンストラクタ」と言います。

タイトルとURLをコピーしました