クラスの拡張(前編)
前回と前々回等、複数回を使ってクラスの話をしました。
そのクラスを継承して、新しいクラスを作成するといった少し高度なお話をしたいと思います。
本当は静的メンバーの話等を先にするのが筋なのでしょうが、内容が前後するのがこのブログの特徴です(?)
さて、クラスの拡張ですが、どのようにそれを実現するのでしょうか?
それは、既存のクラスの内容を受け継ぎ、より強化なクラスを作成します。
便利なのは、既存のクラスの内容を「受け継ぐ」ことが可能なため、再びクラス内のメンバを記述する必要がないことです。
//既存のクラス資産を受け継ぐことを継承といいます。
では早速クラスの拡張を行いたいと思います。
今回使用するのは、前回の「クラスを定義する 」で使用したCatクラスを使いたいと思います。
先に、コードを見てみましょう。
class Cat { //猫の体重を表すフィールド public double weight; //猫の身長を表すフィールド public double height; //猫の鳴き声を返すメソッド public string mew() { return ("にゃ~"); } //走るメソッド public void run() { //走ると100グラム体重が減る weight -= 0.1; } //食べるメソッド public void eat() { //食べると体重が100グラム増える weight += 0.1; } }
これは、世界で通用する猫の姿としておいてください。
今回は、この猫というひな形から、自分の猫の特徴を盛り込むことにします。
ちなみに、今、上に示したコード、今から作るクラスのもととなるコードを基本クラスといいます。
これから作るクラスのことを派生クラスといいます。
class 派生クラス : 基本クラス { }
↑これが拡張クラスの基本形です。
実際に書いてみましょう。
class MyCat : Cat { }
これで、クラスはできました。
派生クラスは、MyCatとしました。
MyCatの中には何もないように見えますが、実はCatのメンバが全部入っているんです。
そこに、新しくフィールドやメソッドを書いていきます。
class MyCat : Cat { //新しくswimming()メソッドを作成 public void swimming() { weight -= 0.5; } //基本クラスと同じ名前でも大丈夫 public string mew() { return ("にゃぉーん"); } }
ここでポイントなのが、基本クラスと同じ名前でも大丈夫という点でしょうかね。
この例で言えば、鳴き声が基本クラスでは『にゃ~』に対し、派生クラスだと『にゃぉーん』となり、上書きをされていることになります。
もちろん、派生クラスからをオブジェクト作り、基本クラスのCatクラスにもあるeat()やrun()も実行できます。
このように派生クラスは基本クラスの定義を継承し、新たな機能をつけることができます。
取り合えず今回はここまで。
次回はクラスの拡張をもう少し詳しく見ていきます。
ではでは~