本文へスキップ
BecomeCoder

C#オブジェクト指向コース · 第1章 オブジェクト指向 · レッスン6

継承

ブラウザで完結

導入

「動物」の共通機能を作っておき、「犬」「猫」がそれを引き継いで拡張する——これが継承です。共通部分を親クラスにまとめ、重複を減らせます。

図解

flowchart TB
    A["Animal(親)<br/>Name / Eat()"] --> D["Dog(子)<br/>Animal の機能 + Fetch()"]
    A --> C["Cat(子)<br/>Animal の機能 + Climb()"]
    style A fill:#e1f5fe

サンプル

var dog = new Dog();
dog.Name = "ポチ";
dog.Eat();      // ポチ は食べた(親から継承)
dog.Fetch();    // ポチ はボールを取ってきた(子で追加)

// : で「Animal を継承する」と宣言
class Animal
{
    public string Name = "";
    public void Eat()
    {
        Console.WriteLine($"{Name} は食べた");
    }
}

class Dog : Animal   // Dog は Animal の機能をすべて引き継ぐ
{
    public void Fetch()
    {
        Console.WriteLine($"{Name} はボールを取ってきた");
    }
}
  • class 子 : 親 で継承する。子は親のpublicメンバーをすべて引き継ぐ
  • 子は親の機能に加えて、独自のメンバーを足せる
  • 共通機能を親に集約でき、重複を減らせる

演習

var car = new Car();
car.Start();     // エンジン始動(親から継承)
car.OpenTrunk(); // トランクを開けた(子で追加)

// TODO: Vehicle クラス(Start メソッド → "エンジン始動")を作り、
//       それを継承した Car クラス(OpenTrunk → "トランクを開けた")を定義してください
___
  • 期待される出力: エンジン始動 トランクを開けた(2行)
ヒント1を見る

class Car : Vehicle { ... } の形で継承します

ヒント2を見る

class Vehicle { public void Start() { Console.WriteLine("エンジン始動"); } } class Car : Vehicle { public void OpenTrunk() { Console.WriteLine("トランクを開けた"); } }

まとめ

  • class 子 : 親で親の機能を引き継ぐ(継承)
  • 子は親の機能+独自の機能を持てる
  • 共通部分を親に集約して重複を減らす

次回: 同じ呼び出しで振る舞いを変える「ポリモーフィズム」です。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。