難しいわけじゃぁ無いんですが、あんまり深く説明すると混乱をきたす可能性があるの
で避けようと思っていたんですが、さらっと継承について説明しておきます。
クラスが機能の塊であることは以前説明しました。
ただ、AとBとCという機能があり、或るクラスにはAとB、もう一つのクラスにはAとCの機
能が必要だった場合、両方のクラスにAという機能を用意すると、同じ機能を二つのクラ
スに記述することになり無駄です。
また、Aという機能に仕様変更が入った場合、二つのクラスを修正しなければなりません。
無駄ですし、修正忘れなどの可能性があります。
この場合、Aという機能を基本として、他のクラスに派生させることにより、他のクラス
からAという機能を使用出来ることを継承といいます。
class Base
{
public void A_Method(){}
}
class Derived1 : Base
{
public void B_Method(){}
}
class Derived2 : Base
{
public void C_Method(){}
}
Derived1クラスもDerived2クラスもBaseクラスを継承してA_Methodを使用できます。
基本クラス(Base)から見ると派生クラスへ派生。
派生クラス(Derived1,2)からみると基本クラスを継承。
ですかね。
基本クラスのメソッドとは異なる動作を派生先で再定義すること、または基本クラスで
空のメソッドを用意し、派生先で定義することをオーバーライドといいます。
例えば……弾を発射する基本クラスがあって、ビームクラスとミサイルクラスに派生さ
せたとしましょう(なんだかよく分からん例だな)
発射はFireで同じですが、ビームがでるか、ミサイルがでるか、派生先クラスによって
変えられるわけです。
class Waepon
{
public virtual void Fire(){}
}
class Beam : Warepon
{
public override void Fire()
{
//びぃむの発射
}
}
class Missile : Warepon
{
public override void Fire()
{
//Fox2
}
}
C++とちがって、オーバーライドするメソッドはoverrideキーワードをつける必要があり
ます。
尚、基本クラスのメソッドは、baseキーワードを使うことによりアクセスできます。
継承とは関係が無いのですが、オーバーライドが出てきたので、一応こっちも。
名前が似てますが、別物です。
オーバーロードはクラス/構造体のメソッドで、同一の名前を持ちながら、パラメータの
違うメソッドのことです。
class Text
{
private string _text;
public Text() { _text = ""; }
public Text(string s) { _text = s; }
}
あーんまり意味が無いんですが、コンストラクタ(インスタンス化したときに呼ばれる
初期化メソッド)でパラメータを省くと空の文字列を、パラメータに文字列を渡すと、
渡された文字列を_textにコピーします。
パラメータによって、処理を変えられるというわけですね。
最終更新:2007年10月29日 12:45