R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

R流、一瞬でわかる.NETオブジェクト指向プログラミング入門13

http://blogs.wankuma.com/rti/archive/2007/08/28/92305.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門12

http://blogs.wankuma.com/rti/archive/2007/08/27/92095.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門11

http://blogs.wankuma.com/rti/archive/2007/08/20/91083.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門10

http://blogs.wankuma.com/rti/archive/2007/08/14/90238.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門9

http://blogs.wankuma.com/rti/archive/2007/08/10/89801.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門8

http://blogs.wankuma.com/rti/archive/2007/08/08/89397.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門7

http://blogs.wankuma.com/rti/archive/2007/08/07/89226.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門6

http://blogs.wankuma.com/rti/archive/2007/08/02/88399.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門5

http://blogs.wankuma.com/rti/archive/2007/07/31/87955.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門4

http://blogs.wankuma.com/rti/archive/2007/07/30/87742.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門3

http://blogs.wankuma.com/rti/archive/2007/07/26/87105.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門2

http://blogs.wankuma.com/rti/archive/2007/07/25/86988.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門1

の続きです。

どこからフォローすれば良いのかわからないので、先頭から順に行ってます。

今回は

抽象クラス

というテーマです。

毎度おなじみのR・田中一郎クラスですが、これらのメンバは、同じわんくま同盟の方のクラスを作る時にも流用できます。
ですから、共通して使うことのできるクラスを作って、これを継承すれば何かと便利ですね。
しかし、同じ実装で良いメンバと、人によって実装が異なるメンバがあります。
こういった場合、メンバのみ定義して、実装は継承したクラスに任せることができます。

以下の C# のコードを見て下さい。


abstract class わんくま同盟
{
  abstract public string 会員番号 { get; } // 抽象メソッドには定義は要らない
  abstract public string 名前 { get; }
  abstract public string 年齢 { get; }
  abstract public string 職業 { get; }
  public virtual void  自己紹介(){
    Console.Writeline(
      "オブジェクト指向ファンの皆さん、こんにちは。" +
      "わんくま会員番号" + this.会員番号 + "番の" + this.名前 + "です。" +
      "年齢は、" + this.年齢 + "才。職業は、" + this.職業 "です。" +
      "今日は、オブジェクト指向ファンの皆さんを前にして、" +
      this.印象 + "な僕が、オブジェクト指向について語るということで、" +
      "些かガクブルな状態ではありますが、早速はじめたいと思います。"
    );
  }



上記の abstract というキーワードが付加されたメンバーは、メンバ名の定義のみが表記されていて実装はありません。
従って、どのような振る舞いをさせるのかを抽象化していることになります。
このように抽象的なメンバには、abstract キーワードを付加します。

抽象化したメンバを含むクラスは、当然、そのクラスだけでオブジェクトを生成できません。
何故なら、実装の無いメンバにアクセスすることなんてできませんし、仮にそれができたとしても実行時にエラーを発生させるくらいなら、コンパイル時に解決したい問題になります。
つまり、抽象化したメンバを含むクラスは、抽象クラスでなければなりません。
そこで クラスにも abstract キーワードを付加します。


abstract キーワードのついたクラスは、オブジェクトを生成できません。
抽象クラスは、以下のように継承されるためのクラスです。


class R.田中一郎 : わんくま同盟
{
  public override string 会員番号 { get { return "34";             }}
  public override string 名前     { get { return "R・田中一郎";   }}
  public override string 年齢     { get { return "18";             }}
  public override string 職業     { get { return "IT関係";         }}
  public override string 印象     { get { return "素敵だし爽やか"; }}
}


このようにしておくと、次のように、わんくま同盟型を使うことができます。


this.名前と印象を表示(new R.田中一郎());
this.名前と印象を表示(new ぽぴ王子());

private void 名前と印象を表示(わんくま同盟 w) {
  Console.Writeline(w.名前 + ":" + w.印象);
}

投稿日時 : 2007年8月31日 14:03

Feedback

# re: R流、一瞬でわかる.NETオブジェクト指向プログラミング入門13 2007/09/01 17:18 ひろえむ

まったく関係ないんですが、エントリも13も続くともはや一瞬とは呼べないのでは・・・(^^;

# re: R流、一瞬でわかる.NETオブジェクト指向プログラミング入門13 2007/09/02 9:08 ぽぴ王子

突然僕の名前が出てきてビビった(笑)

>> ひろえむさん
そうそう、僕も12ぐらいの時にそう思ってました。
一瞬って言う割には長いよなーと…

# re: R流、一瞬でわかる.NETオブジェクト指向プログラミング入門13 2007/09/04 14:14 R・田中一郎

ひろえむ さん

>まったく関係ないんですが、エントリも13も続くともはや一瞬とは呼べないのでは・・・(^^;

誇大広告ですね^^;

---------------------------------------------
ぽぴ王子 さん

>突然僕の名前が出てきてビビった(笑)

どこかで登場させておかねば、という謎の使命感があったものですから。

# R流、一瞬でわかる.NETオブジェクト指向プログラミング入門14 2007/09/06 18:52 R.Tanaka.Ichiro's Blog

R流、一瞬でわかる.NETオブジェクト指向プログラミング入門14

タイトル
名前
Url
コメント