C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#の抽象クラス(abstract class)とは?基本から実例までわかりやすく解説

抽象クラスとは

C#における抽象クラス(abstract class)は、abstractキーワードを使って宣言される特殊なクラスです。抽象クラスには、実装を持たない「抽象メソッド」と、通常の処理を持つ「非抽象メソッド」の両方を含めることができます。

最大の特徴は、抽象クラスは直接インスタンス化できないという点です。newキーワードでオブジェクトを生成することはできず、必ず派生クラスを通じて利用します。この仕組みにより、「共通の設計図を基底クラスで定義し、具体的な実装は各派生クラスに任せる」というポリモーフィズム(多態性)を実現できます。

抽象クラスの基本的な宣言方法

以下は、抽象クラスVehicleと、その中に宣言された抽象メソッドdisplay()の例です。

public abstract class Vehicle {
    public abstract void display();
}

抽象メソッドには本体(処理内容)がなく、宣言のみを行います。メソッド名の後にセミコロン(;)を付けるだけでよく、波括弧 { } は不要です。

派生クラスでの実装

抽象クラスを継承した派生クラスは、すべての抽象メソッドをoverrideキーワードを使って必ず実装(オーバーライド)しなければなりません。ここでは、Vehicleクラスを継承するBusクラスの例を示します。

public class Bus : Vehicle {
    public override void display() {
        Console.WriteLine("Bus");
    }
}

完全なサンプルコード

それでは、抽象クラスを使った完全なプログラムを見てみましょう。この例では、Vehicle抽象クラスを継承したBusCarMotorcycleの3つの派生クラスを作成し、それぞれでdisplay()メソッドを実装しています。

using System;

public abstract class Vehicle {
    public abstract void display();
}

public class Bus : Vehicle {
    public override void display() {
        Console.WriteLine("Bus");
    }
}

public class Car : Vehicle {
    public override void display() {
        Console.WriteLine("Car");
    }
}

public class Motorcycle : Vehicle {
    public override void display() {
        Console.WriteLine("Motorcycle");
    }
}

public class MyClass {
    public static void Main() {
        Vehicle v;
        v = new Bus();
        v.display();
        v = new Car();
        v.display();
        v = new Motorcycle();
        v.display();
    }
}

実行結果

Bus
Car
Motorcycle

プログラムのポイント

注目すべきはMain()メソッド内の処理です。変数vは抽象クラスVehicle型として宣言されていますが、実際に代入されているのは派生クラスのインスタンスです。同じv.display()という呼び出しでも、代入されたオブジェクトに応じて「Bus」「Car」「Motorcycle」と異なる結果が出力されます。これこそがポリモーフィズムの恩恵であり、抽象クラスを活用する大きなメリットです。

まとめ

  • 抽象クラスはabstractキーワードで宣言する
  • 抽象メソッドと通常のメソッドを混在させて定義できる
  • 抽象クラスは直接インスタンス化(new)できない
  • 派生クラスは抽象メソッドを必ずoverrideで実装する必要がある
  • 基底クラス型の変数で派生クラスのオブジェクトを扱うことで、柔軟で拡張性の高い設計が可能になる
  1. Javaの抽象クラスとは?基本ルールと実装例をわかりやすく解説

    Javaの抽象クラスとは宣言に「abstract」キーワードを含むクラスは、抽象クラスと呼ばれます。抽象クラスは、継承によって利用されることを前提とした設計用のクラスであり、オブジェクト指向プログラミングにおける重要な概念の一つです。抽象クラスの主な特徴抽象クラスには、抽象メソッド(本体を持たないメソッド。例:public void get();)が含まれる場合もあれば、含まれない場合もあります。ただし、クラス内に1つでも抽象メソッドが存在する場合、そのクラスは必ず abstract として宣言しなければなりません。abstract として宣言されたクラスは、インスタンス化(newによるオブジ

  2. Pythonの抽象基底クラス(abc)の使い方を徹底解説

    1つ以上の抽象メソッド(abstract method)を持つクラスは「抽象クラス」と呼ばれます。抽象メソッドとは、宣言のみが行われ、実装を持たないメソッドのことです。抽象クラスは直接インスタンス化することができず、その抽象メソッドは必ずサブクラス側で実装しなければなりません。抽象基底クラス(ABC)とは抽象基底クラス(Abstract Base Classes:ABC)は、hasattr() のような他の手法では不格好になったり、マジックメソッドの扱いなどで微妙に誤動作したりするケースにおいて、インターフェースを明確に定義するための手段を提供します。ABCには「仮想サブクラス(virtual