共通の土台を定義する「抽象クラス(Abstract Class)」とは?
Javaのオブジェクト指向では、クラスを継承して機能を共有することができます。
その中でも抽象クラス(abstract class)は、共通処理と未定義の処理の両方を持てる特別なクラスです。
抽象クラスとは?
抽象クラスとは、インスタンス化できないクラスで、
一部のメソッドだけ名前だけを定義して中身を実装しない(抽象メソッド)という構造を持ちます。
主に複数のクラスに共通する機能の土台として使われます。
抽象クラスの構文
abstract class クラス名 {
// 通常のメソッド(共通処理)
void メソッドA() { ... }
// 抽象メソッド(処理は継承先で定義)
abstract void メソッドB();
}
例:Animal 抽象クラス
abstract class Animal {
public void sleep() {
System.out.println("眠ります。");
}
public abstract void makeSound(); // 抽象メソッド
}
継承して使う
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("ワンワン!");
}
}
実行例
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.sleep(); // 共通処理(親クラス)
dog.makeSound(); // 個別処理(子クラス)
}
}
抽象クラスの特徴
- インスタンス化できない(newはできない)
- 抽象メソッドを1つでも持つと、そのクラスはabstractにする必要がある
- 共通処理と未定義の処理を両方持てる
抽象クラスとインターフェースの違い
項目 |
抽象クラス |
インターフェース |
メソッド |
共通処理(実装あり)も定義可 |
基本的にすべて抽象(Java8以降はdefaultあり) |
継承の可否 |
1つのクラスしか継承できない |
複数のインターフェースを実装できる |
主な用途 |
共通ロジック+一部未定義 |
仕様の定義(APIの枠組み) |
まとめ
抽象クラス(Abstract Class)は、共通処理と抽象的な定義を組み合わせた土台クラスです。
共通する機能は親クラスにまとめ、具体的な処理は子クラスで実装することで、柔軟な設計が可能になります。
インターフェースと使い分けながら、より理解を深めていきましょう!