連載

C#入門

第4回 継承とインターフェイス

(株)ピーデー
川俣 晶
2001/05/10


機能を追加する継承

 継承はクラスを用いるクラシックなオブジェクト指向における1つの目玉機能である。継承とは、あるクラスの持つ機能をそっくり引き継いで、さらに機能を付け加えた新しいクラスを作る機能を言う。

 さっそく具体的なサンプルソースを見てみよう。以下のサンプルソースはごく基本的な継承機能を記述したソースコードである。

  1: namespace ConsoleApplication5
  2: {
  3:   using System;
  4: 
  5:   public class Person
  6:   {
  7:     public string getName()
  8:     {
  9:       return "私には名前がありません。";
 10:     }
 11:   }
 12: 
 13:   public class Taro : Person
 14:   {
 15:     public string getTaroName()
 16:     {
 17:       return "私の名前は太郎です。";
 18:     }
 19:   }
 20: 
 21:   public class Class1
 22:   {
 23:     public static int Main(string[] args)
 24:     {
 25:       Person person = new Person();
 26:       Console.WriteLine( person.getName() );
 27:       Taro taro = new Taro();
 28:       Console.WriteLine( taro.getName() );
 29:       Console.WriteLine( taro.getTaroName() );
 30:       return 0;
 31:     }
 32:   }
 33: }
クラスの継承を使用したサンプル・プログラム

 このソースコードには3つのクラスが定義されている。1つは5行目から始まるPersonクラス。もう1つは13行目から始まるTaroクラス。最後は21行目から始まるClass1クラスであるが、これはただ単にMainメソッドを持つために存在しているだけなので、何の役割もはたしていない。その点で、今回のサンプルはすべて共通しているので、Class1クラスの存在は無視していただきたい。

 さて、このサンプルソースのポイントは、13行目である。この行“public class Taro : Person”が意味していることは、以下のとおりだ。まず“public”は、これが外部からアクセスを許されたクラスであることを示す。ただし今回のサンプルではそれほど大きな意味はない。“class”はクラスを宣言するキーワードであり、宣言されるクラスの名前は“Taro”である。そして、その後にあるコロン記号(:)が、他のクラスからの継承を行うという意図を示すために記述される。具体的に、どのクラスから継承されるかは、この後にカンマ区切りで、クラス名や後で説明するインターフェイス名を列挙する。ここでは、“Person”というキーワードを記述することで、Personクラスから継承していることを示している。

 Personクラスを継承したTaroクラスでは、Personクラスが持つ機能と、Taroクラスが持つ機能の双方を利用できる。その証拠に、27行目で作成したTaroクラスのインスタンスからは、Personクラスで定義したgetNameメソッドと、Taroクラスで定義したgetTaroNameメソッドの双方がどちらも利用できることが、28行目と29行目から分かるだろう。

 このサンプル・プログラムを実際に実行した結果は以下のとおりだ。1行目は、PersonクラスのgetName( )メソッドの実行結果。2行目は、TaroクラスのgetName( )メソッドの実行結果である。TaroクラスはPersonクラスの機能を引き継いでいるので同じ文字列が表示される。3行目は、Taroクラスで追加されたgetTaroName( )の結果である。これはPersonクラスにはなく、Taroクラスにしかないメソッドである。

プログラムの実行結果
クラスの継承により、Taroクラスでは定義していないPersonクラスのメソッドを呼び出している。
  PersonクラスのgetNameメソッドの実行結果。
  Personクラスを継承したTaroクラスのgetNameメソッドの実行結果。メソッドの定義自体はTaroクラス内に存在しないにもかかわらず、Personクラスで定義されたgetNameメソッドを実行し、と同じ結果が得られていることが分かる。
  同じくTaroクラスのgetTaroNameメソッドの実行結果。

 さて、ここで用語を説明しよう。あるクラスを継承して別のクラスを作ったとき、最初のクラスをスーパークラスという。逆に、あるクラスから別のクラスが作られたとき、作られたクラスはサブクラスという。分かりにくいかもしれないが、これも、そういうものでしかないので、暗記してしまえば難しくはない。

スーパークラスとサブクラスの関係
あるクラスを継承して別のクラスを作ったとき、元になったクラスのことをスーパークラスと呼び、作成されたクラスをサブクラスと呼ぶ。
 
 

 INDEX
  C#入門 第4回 継承とインターフェイス
 1.機能を追加する継承
   2.機能を置き換える継承
   3. 抽象クラスからの継承
 
「C#入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間