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

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

【C# オブジェクト指向】継承③ ポリモーフィズム protected part2-7

calendar

reload

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

今回はポリモーフィズム,protected修飾子について解説します.

ポリモーフィズム

ポリモーフィズムとは?

スーパークラスの型に入ったインスタンスに対して,メソッドを呼び出した時に,そのインスタンスのメソッドが実行され,インスタンスの種類によって異なる動作をすること.

多態性とか多様性っていう名前も付いていますね.

簡単に言えば,スーパークラスの型の変数にサブクラスのインスタンスを代入したとき,サブクラスの方のメソッドが実行されます

言葉だけだとピンと来ないと思うので,実際に動かしてみましょう.

 

ソースコード

 

実行結果

同じメソッド名なので,オーバーライドする事が前提になります.

Human型の変数に,Student型,CircleMember型のインスタンスが代入されて,それぞれで宣言したメソッドが実行されています.

 

型変換(キャスト)

先ほどのプログラムで,CircleMemberクラスでCircleメソッドが宣言されていました.

このメソッドをHuman型の変数で呼び出したらどうなるのか?

ProgramクラスのMainメソッドを次のように書き換えて実行してみます.

 

エラーが出力されました.

変数humanはHuman型で宣言しています.なので,CircleMemberクラスのCircleメソッドは無いものとして扱われているからエラーが出てしまいます.

しかし,実際に変数humanが参照するのはCircleMemberクラスのインスタンスです.

このとき無理やり型変換を行う事で,Circleメソッドを実行できるようになります.

型変換は次のように記述します.

 

ソースコード

 

実行結果

 

protected

今回ネタが少ないので,protected修飾子についてもやりたいと思います.

part2-3で紹介したアクセス修飾子ですね.

protected修飾子は,自クラスとサブクラス内からのみアクセスする事ができるようにする修飾子です.

privateは自クラスのみアクセスでした.

privateのアクセス範囲がサブクラスまで拡張したものと覚えましょう.

 

前回のソースコードから,protectedに変えられる箇所を探してみましょう.(ついでにprivateに変えられるところも変えましょう.)

 

ソースコード

 

実行結果

Humanクラスのフィールド(変数age,name)がprotected

Studentクラスのフィールド(変数number)がprivateになります.

 

 

今回はここまで!

次回は抽象クラス(abstract)について解説したいと思います!