C#をつつく18-多態性1-メソッドオーバーライド。親子でも違うものはある。
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 virtual void Talk( ) {
Console.WriteLine( "私は{0}。年は{1}だよ。",
this.m_Name, this.m_Age );
}
public abstract void Move( );
}
public class Human : Animal
{
public Human( string name, int age ) : base( name, age ) { }
//これがメソッドオーバーライド
public override void Talk( ) {
Console.WriteLine( "私は{0}。年は20だよ。", this.Name );
}
public override void Move( ) {
Console.WriteLine( "テクテクテクテク" );
}
}
このコードを実行してみよう。これでHumanクラスは実年齢に関係なく二十歳を名乗ることになるよ。
ドリィちゃんそこまでするか・・・おっほん。それはともかく、このようにして基本となるクラスのメソッドにvirtual キーワードを付け加えることにより派生クラス(継承したクラスの事)が メソッドの定義を書き換えることが出来るよ。 これがメソッドオーバーライド機能ピヨ。 この機能は便利だから多用するよ。だからしっかり覚えよう。 それで、どのような時virtualキーワードをつければいいかなんだけど、基本的には同じ動きなんだけど、 たまに動きを変えたい場合に使用するといいピヨ。 もしそのメソッドが派生クラスごとに動きが違う場合はabstractキーワードの方がいいピヨ。上手に使い分けてね。 メソッドオーバーライドについてはこれで終わりピヨ。 でもオブジェクト指向についてつっつくことはまだあるんで、次回からは今まで紹介できなかった細かな所をつっつくピヨ。 覚えたら覚える程得をするので、身構えずにリラックスして楽しんでね。