この記事で最後のオブジェクト指向プログラミングの機能
多態性(ポリモーフィズム)
に関するC#の機能を扱ってみよう。
名前は難しいけど、大したことしていないからみんなリラックスして読んでね。
さて、今回までにAnimal抽象クラスを元に、BirdクラスとHumanクラスを作ったけど、
個性が無いとつまらないよね?
それに、
そもそも同じ機能ならば作る意味が無いピヨね。
ということでAnimal抽象クラスに一つメソッドを追加するピヨ。
ではさっそくコードだぁー。
public abstract class Animal
{
private string m_Name;
public string Name {
get { return m_Name; }
set { m_Name = value; }
}
private int m_Age;
public int Age {
get { return m_Age; }
set {
if ( value > 0 ) m_Age = value;
}
}
public Animal( string name, int age ) {
this.Name = name;
this.Age = age;
}
public void Talk( ) {
Console.WriteLine( "私は{0}。年は{1}だよ。",
this.m_Name, this.m_Age );
}
//ここに機能を追加
public abstract void Move( );
}
さっそくこのコードをコンパイルしてね。
コンパイルしたら・・・
'Bird' は継承抽象メンバ 'Animal.Move()' を実装しません。
'Human' は継承抽象メンバ 'Animal.Move()' を実装しません。
とC#コンパイラに怒られるピヨ。でも、これでいいんだ。
こうすることによって、新しいDogクラスとかを作る際に
Moveメソッドの実装を忘れないで済むんだ。
C#コンパイラに怒られたからMoveメソッドを実装してみよう。
public class Bird : Animal
{
public Bird( string name, int age ) : base ( name, age ) { }
public override void Move( ) {
Console.WriteLine( "バサバサバサバサ" );
}
}
public class Human : Animal
{
public Human( string name, int age ) : base( name, age ) { }
public override void Move( ) {
Console.WriteLine( "テクテクテクテク" );
}
}
class Program
{
static void Main( string[ ] args ) {
Bird tori = new Bird( "インドリ", 29);
tori.Move( );
Console.WriteLine( "{0}参上!", tori.Name);
tori.Talk( );
Console.WriteLine( );
Human dre = new Human( "ドリィちゃん", 16 );
dre.Move( );
Console.WriteLine( "{0}参上!", dre.Name );
dre.Talk( );
Console.WriteLine( );
}
}
このコードを実行してごらん。同じ
同じMoveメソッドでも実行結果が違うピヨ。
これが
多態性(ポリモーフィズム)なんだ。
突然だけど、長すぎると読みにくいので次回へ続く。