半人前プログラマーの技術談議

開発した物と,C#を入門者向けに解説した記事を書いています!

【C# オブジェクト指向】継承② コンストラクタ part2-6

calendar

reload

こんにちは!シロウです!

お待たせいたしました!今日から投稿ペースが戻ります!

今回は継承した場合のコンストラクタついて解説します!

コンストラクタ

コンストラクタについては,part2-2で説明しました.

コンストラクタは,クラスのインスタンスが生成されるとき,最初に呼びだされる処理の事でした.

では継承した場合はどうなるのか?

実際に簡単なプログラムで動かしてみます.

 

ソースコード

 

実行結果

Humanクラスのコンストラクタが継承されています.

実は,コンストラクタメソッドと同様に扱う事ができます.

(インスタンスを生成する時に,実行されるメソッドだと思って頂ければいいです.)

 

先ほどのプログラムでは,スーパークラスのコンストラクタが,サブクラスで継承され,

サブクラスのインスタンスを生成された時に呼び出されましたが,

サブクラスでコンストラクタを宣言した場合を考えてみましょう.

 

ソースコード

 

実行結果

Studentクラスのコンストラクタが呼び出されています.

(part2-2で説明したコンストラクタと変わりません.)

 

最後に,同時にコンストラクタを宣言した場合を考えてみます.

 

ソースコード

 

実行結果

先にHumanクラスのコンストラクタが呼び出され,

その後にStudentクラスのコンストラクタが呼び出されています.

 

まとめると,

スーパークラスのコンストラクタが先に呼び出され,サブクラスのコンストラクタが後から呼び出されます.

 

ここまでが前提になります.

次は引数がある場合を考えてみましょう.

 

引数がある場合

スーパークラスのコンストラクタに引数がある場合は,記述が少し変わります.

スーパークラスを指す base キーワードを使って,次のように記述します.

サブクラスのコンストラクタの処理を実行する前に,先にスーパークラスのコンストラクタの処理が実行されます.

注意してほしいのが,サブクラスの引数の変数名は,base(スーパークラス)と同じ変数名を使用するか,定数にする必要があります

 

例えば,このように記述します.

※サブクラス(Studentクラス)のコンストラクタの引数は,順番に記述する必要はありません.例えば,Student(int age, int number, string name)でも動きます.

 

実際に使うとこのようになります.

 

ソースコード

 

実行結果

 

今回はここまで.

ポリモーフィズムまで解説しようかと思いましたが,予想以上に長くなってしまったので次に回したいと思います.

段々補足で書きたい事が増えていく・・・