プログラミングの用語一覧へ
このページの目次

抽象クラスとは?

最終更新:2026/08/18

3秒でわかる

中身のないメソッドを含められる、継承されて完成する前提のクラス。共通処理を親に置きつつ、違う部分だけ子に書かせるために使います。

もう少し詳しく

どういうものか

抽象クラスは、それ単体ではインスタンスを作れないクラスです。Java では abstract 修飾子を付けて宣言し、中身を書かない抽象メソッドを持てます。抽象メソッドを持つ子クラスは、それを実装しない限りやはり抽象クラスのままです。共通の処理は親に実装として置き、種類ごとに変わる部分だけを抽象メソッドとして子に押し付けられるのが特徴です。

なぜ必要か

図形を扱うプログラムを考えます。面積の求め方は円と長方形で違いますが、面積を求めてラベルを組み立てて出力する流れは同じです。この共通の流れを親に書き、面積の計算だけを抽象メソッドにしておけば、新しい図形を足すときに書く量は面積の計算だけで済みます。呼び出す側は親ので受け取れるので、図形が増えても分岐を増やさずに済みます。

具体例

abstract class Shape { abstract double area(); // 中身は子に任せる String label() { // 共通処理は親が持つ return getClass().getSimpleName() + " の面積は " + area(); } } class Circle extends Shape { private final double r; Circle(double r) { this.r = r; } @Override double area() { return Math.PI * r * r; } }

Shape s = new Shape() と書くとコンパイルエラーになり、new Circle(2.0) だけが作れます。

似た用語との違い

比較点抽象クラスインタフェース
継承できる数1 つだけいくつでも実装できる
フィールド通常のフィールドを持てる定数のみ
コンストラクタ書ける書けない
向いている場面共通の実装を配りたい能力の約束だけを決めたい


同じ種類のものが実装を分け合うなら抽象クラス、無関係な型に共通の振る舞いを持たせたいならインタフェースが素直です。

つまずきやすいところ

継承は 1 つしかできないので、抽象クラスを親に選ぶと他のクラスを継承する余地が消えます。迷ったらインタフェースを先に検討し、共通実装をどうしても配りたいときだけ抽象クラスにする、という順番が扱いやすいです。また、親のコンストラクタは子から必ず呼ばれます。引数付きのコンストラクタしか無い抽象クラスを継承すると、子で super の呼び出しを書かない限りコンパイルが通りません。

知識のつながり

サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

現在地抽象クラスプログラミング

LEARN BY DOING

この用語を、教材で使ってみる

直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

この用語を扱うコース

コース

Java入門:基礎文法編

69レッスン
コース

Java 中級:コレクション・Stream・例外処理

64レッスン
コース

Java Silver対策

55レッスン
Javaコースの全編を見る