abstract class 抽象クラス

最終更新:2026-10-22

abstract class 抽象クラス

抽象クラス(abstract class)は「未完成の基底クラス」です。実装を含めることも、抽象メンバー(abstract area(): number)として宣言だけしてサブクラスに必ず埋めさせることもできます。直接インスタンス化はできず、extends されるだけです。「すべてのサブクラスが骨格を共有し、細部はそれぞれ実装する」ことを表すのに適しています。

グループ関数とクラス
種類構文
strict モード不要

ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。

📝 構文

abstract class Shape {
  constructor(protected name: string) {}

  abstract area(): number;          // 抽象メソッド:シグネチャのみ

  describe(): string {              // 具体メソッド:サブクラスがそのまま継承
    return `${this.name}: ${this.area().toFixed(2)}`;
  }
}

class Circle extends Shape {
  constructor(private radius: number) { super("circle"); }
  area(): number { return Math.PI * this.radius ** 2; }
}

⚙️ パラメータ

abstract class抽象クラス:new できず、継承されるだけです
abstract area(): number抽象メンバー:シグネチャのみで実装を持たず、サブクラスが実装しないとコンパイルエラーになります
protected抽象クラスとよく組み合わせます。name のような「サブクラスに使わせる」状態です

戻り値:抽象メソッドはシグネチャだけ書きます。具体メソッドは通常どおり戻り値型を注釈します。抽象クラスのインスタンスは存在せず、実行中のオブジェクトはすべてサブクラスのインスタンスです。

▶ サンプル

下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:

出力:

circle: 3.14
square: 4.00

(トランスパイル後の実行出力。new Shape("x") はコンパイルエラー TS2511 になります——トランスパイル後の JS では実際には普通のクラスなのに、です)

💡 ポイント

ℹ️ 説明 抽象性もコンパイル時のものです。tsc は new Shape() を禁じますが、トランスパイル後の JS は普通のクラスで、実行時に new しても失敗しません——これは「うっかり防止」であって「物理的な封鎖」ではありません。
💡 ヒント 抽象クラス vs インターフェース:抽象クラスは状態と実装を運べます(テンプレートメソッドパターンの核心)。インターフェースは形状しか記述しません。コードを共有するなら抽象クラス、形状だけを縛るならインターフェース。両方を同時に使うこともできます。
⚠️ 注意 抽象クラスは単一継承のみです(extends できるのは1つのクラス)。「複数の能力」が要るときはインターフェース + コンポジションで対応し、継承チェーンを無理に組み上げないでください。
ケースは今後追加予定です。

📚 関連チュートリアル

❓ よくある質問

Q 抽象クラスを new するとどうなりますか?
A コンパイルエラー TS2511(抽象クラスのインスタンスは作成できません)。トランスパイル後の JS では普通のクラスで、実行時に new してもエラーになりません——だから実行時の保護を当てにしてはいけません。
Q 抽象クラスにコンストラクタを持たせられますか?
A 持たせられますし、多くは protected と組み合わせます。protected 修飾されたコンストラクタも外部からの new を禁じます(サブクラスは super 呼び出しが可能)。「直接インスタンス化の禁止」の別の表現です。
Q 抽象クラスとインターフェース、どちらを選ぶべきですか?
A 実装や状態を共有したい(describe メソッドや name フィールド)→ 抽象クラス。契約だけを定義し、1つのクラスに複数実装させたい → インターフェース。よくある組み合わせは、インターフェースで外部契約を定義し、抽象クラスでデフォルト実装を提供する形です。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%