こうしろうのJavaオブジェクト指向プログラミングの勉強は続く。オーバーロードと継承は203話で学習済みだ。今回はオーバーライドから始める。オーバーライドとはスーパークラス(親クラス)で定義されているメソッドをサブクラス(子クラス)で再定義することだ。再定義というと難しそうに聞こえるが同じ名前のメソッドをサブクラスに作成するというだけのことだ。オーバーライドを使うと使いたいクラスの機能を一部だけ変更することができるのだ。

----------------------------------------------------------

public class Car {
 void drive () {
  System.out.println("走ります");
 }
}

----------------------------------------------------------
 Carクラスには,上記のdriveメソッド以外にもたくさんのメソッドがあると思ってほしい。その中のdriveメソッドをサブクラスで再定義してみる。
----------------------------------------------------------

public class senkyoCar extends Car{
 void drive () {
  System.out.println("手を振りながら走ります");
 }
}

----------------------------------------------------------
 Carクラスを継承するsenkyoCarクラスを作成する。選挙カーは手を振って走るので,driveメソッドを再定義した。
----------------------------------------------------------

public class useSenkyoCar {
 public static void main(String[] args) {
  senkyoCar sCar1;
  sCar1 = new senkyoCar();
  sCar1.drive();
 }
}

----------------------------------------------------------
 senkyoCarクラスのインスタンスsCar1を作成し,driveメソッドを実行すると「手を振りながら走ります」と出力する。

 さて,今回の選挙は自民党の圧勝に終わったが,こうしろう一家の住んでいる富山県高岡市は今までと様子が違った。富山県高岡市は富山3区の最大の票田である。富山県はずっと自民王国,富山3区は完全無風地帯,自民党公認の誰が比例にまわるかぐらいの話題しかなかった。今回は状況が大きく変わった。毎回,富山3区の票をがっぽり集めていた綿貫民輔前衆議院議長が新党を立ち上げたからだ。開票率1%に満たないうちから,当確が出ていた綿貫さんが国民新党になったことで,開票率80%を超えても「確」の字が出なかった。結果は予想通りに終わったが,「やらんでも決まっとっちゃ」という感じではなかった。

   でも,決まっていた方が便利なこともある。それがJavaのコンストラクタだ(最近では,こんな無理なこじつけも平気である。困ったものだ)。コンストラクタは特別なメソッドで,クラスのインスタンスが生成される時に自動的に実行される。必ず,実行されることが決まっているのだ。クラス名と同名のメソッドがコンストラクタとなる。

 クラスを生成するときに,やっておけばよいこと,いわゆる初期化処理をコンストラクタに記述すればよい。
----------------------------------------------------------

public class TaxClass {
 private double rate;
 TaxClass () {
  rate = 0.05;
 }
 TaxClass (double x) {
  rate = x;
 }
 int taxAdd (int p) {
  return((int)(p * (1 + rate)));
 }
}

----------------------------------------------------------
 税額を足した金額を求めるTaxClassを作成した。コンストラクタはオーバーロードを使って2つ作ってみた。引数なしのTaxClass ()コンストラクタと引数が1つあるTaxClass (double x)コンストラクタである。引数なしのTaxClass ()では rateフィールドに0.05を設定している。引数付きのTaxClass (double x)では引数として受け取った税率をrateフィールドに設定する。taxAddメソッドは引数として渡された金額に税額を加算した金額を返す。
----------------------------------------------------------

public class UseTaxClass {
 public static void main(String[] args) {
  TaxClass goods = new TaxClass();
  System.out.println("金額は" + goods.taxAdd(3200)); 
  System.out.println("金額は" + goods.taxAdd(1000)); 
 }
}

----------------------------------------------------------
TaxClass goods = new TaxClass()と,クラスを生成したときは引数なしのコンストラクタが実行され,rateフィールドに0.05が入るので,実行結果は次のようになる。
----------------------------------------------------------

金額は3360
金額は1050

----------------------------------------------------------
 以下のように引数に税率を指定したときは引数を1つ取るコンストラクタが実行される。
----------------------------------------------------------

TaxClass goods = new TaxClass(0.08);

----------------------------------------------------------
rateフィールドに8%の消費税率が設定され,計算結果は以下のようになる。
----------------------------------------------------------

金額は3456
金額は1080

----------------------------------------------------------
 郵政民営化の開始時期はコンピュータシステムの開発期間などを考慮して半年間延期になったようだが,消費税率はどうなるのだろうか。8%だと結構な税額になる。急なアップは勘弁してほしいなあ。