1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】抽象クラスとは?

Posted at

抽象クラスとは?

抽象クラスとは、
継承されることを前提とした設計用のクラス」 です。

つまり、自分だけでは完全な形になっていないクラス。

C#では abstract キーワードを使って定義します。

abstract class Animal
{
    public abstract void Speak(); // 抽象メソッド(中身がない)

    public void Eat()
    {
        Console.WriteLine("食べています");
    }
}

上の例では、Animal クラスは「動物」というざっくりした存在。
動物には「食べる(Eat)」という共通の動作はあるけど、
「鳴く(Speak)」は動物ごとに違います。

だから Speak() の中身は書かずに「抽象メソッド」として宣言しておくわけです。

抽象クラスを継承して使う

抽象クラスは そのままインスタンス化できません
必ず「具体的な子クラス」を作ります。

class Dog : Animal
{
    public override void Speak()
    {
        Console.WriteLine("ワンワン!");
    }
}

class Cat : Animal
{
    public override void Speak()
    {
        Console.WriteLine("ニャー!");
    }
}

使うとき

Animal dog = new Dog();
dog.Speak(); // ワンワン!
dog.Eat();   // 食べています

Animal は抽象的な存在ですが、
DogCat がその「具体的な中身」を埋めてくれるわけです。

抽象クラス vs インターフェース

抽象クラスと似た存在に「インターフェース」があります。

項目 抽象クラス インターフェース
継承できる数 1つまで 複数実装OK
フィールド 持てる 持てない(定数以外)
共通処理の実装 可能 基本的に不可(C#8以降はdefault実装OK)
目的 基本設計の共有 約束(仕様)の定義
  • 抽象クラス:共通処理を含む「ベースクラス」を作りたいとき
  • インターフェース:異なるクラス間で「同じ機能を保証」したいとき

まとめ

要点 内容
抽象クラス 継承前提のクラス
抽象メソッド 子クラスで必ず実装が必要なメソッド
使い道 共通処理+個別処理をまとめたいとき
インスタンス化 不可(必ず継承して使う)

抽象クラスは、
「共通点はまとめたいけど、違う部分もある」
というときに便利です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?