高岡市のジュニア親善大使として,ブラジルミランドポリス市に派遣されたかずが撮ってきたイッペー(イペー)の木の写真である。ピンク,紫,黄色の花を咲かせるブラジルの国花だ。
ブラジルから帰ってきて,はや数週間が経つが折りに触れ,思い出話をしてくれる。毎日行動をともにしていた日本語学校の子供たちがなつかしいのか,一緒に写っている写真を日替わりで,机の上のフォトスタンドに入れては眺めている。
さて,こうしろうのオブジェクト指向の勉強は佳境に入る。オーバーロード,継承,オーバーライド,コンストラクタ,インターフェイスとJavaのオブジェクト指向を学んでいく。ひとつひとつ丁寧に書いていると,5話ぐらいになってしまうので,詳しい解説は日経ソフトウエア誌面の中島省吾さんの連載「はじめよう!Java」にお任せすることにして,駆け足で進める。
オーバーロード
オーバーロードとは引数の型,もしくは数が違えば,ひとつのクラス内に同じ名称のメソッドを複数定義することを認めるものである。
---------------------------------------------------------- public void song(String songname) ・・・・・・・・・(A) public void song(String songname,int songtime)・・・(B) ----------------------------------------------------------このように, songname(歌の名前)を1つだけ引数としてとるメソッド(A)と,songname とsongtime(歌う時間)の2つを引数としてとる2つのメソッド(B)を定義することができる。歌の名前だけを指定してsongメソッドを呼び出したときは(A)が実行され,歌の名前と歌う時間を指定したときは(B)が実行される。クラスを使う立場で考えると,指定する引数に応じて動作を変えてくれることになる。
継承
すでに存在するクラスに機能を追加したり,一部の動作を変更したいときには継承を使う。継承を使うと,すでに存在するクラスから新しいクラスを作成することができる。このとき基になるクラスをスーパークラス(親クラス)といい,スーパークラスをベースにして新たに作成するクラスをサブクラス(子クラス)という。
---------------------------------------------------------- public class Car { void drive () { System.out.println("走ります"); } } ----------------------------------------------------------driveというメソッドを持つCarという名前のクラスがあったとしよう。
---------------------------------------------------------- public class policeCar extends Car{ void soundSiren() { System.out.println("サイレンを鳴らす"); } } ----------------------------------------------------------Carクラスをスーパークラスとするパトカー(policeCar)クラスを作成したいとする。policeCar extends CarがCarクラスを継承してpoliceCarサブクラスを作成する宣言だ。サイレンを鳴らすsoundSirenメソッドを定義している。
---------------------------------------------------------- public class usePoliceCar { public static void main(String[] args) { policeCar pCar1; pCar1 = new policeCar(); pCar1.drive(); pCar1.soundSiren(); } } ----------------------------------------------------------policeCarクラスのインスタンスpCar1を生成し,スーパークラス(Car)で定義されているdriveメソッドとサブクラス(policeCar)のsoundSirenメソッドを呼び出している。policeCarクラスを使う側からすると,メソッドがスーパークラスで定義されていようが,サブクラスで定義されていようが関係ない。
クラスを作る側からすると,継承を使うことで差分だけを簡単にプログラミングできる。
こうしろうはこのあたりの基礎については大体理解できているようだが,基礎だけわかっても実用的なクラスを作ることはできない。なかなか先は長いのだ。