Javaの抽象クラスと具象クラスの違いを徹底解説!比較表とサンプルコード付き
Javaでは、オブジェクト指向プログラミングにおける抽象化(abstraction)を実現する手段として、抽象クラス(abstract class)とインターフェースが用意されています。抽象クラスとは、実装を持たない抽象メソッドを含むことができ、子クラスに対してメソッドの実装を強制する特殊なクラスのことです。
一方、具象クラス(concrete class)は、すべてのメソッドが実装された通常のクラスであり、直接インスタンス化して利用できます。本記事では、抽象クラスと具象クラスの主な違いを、比較表とサンプルコードを使ってわかりやすく解説します。
抽象クラスと具象クラスの違い(比較表)
| No. | 比較ポイント | 抽象クラス | 具象クラス |
|---|---|---|---|
| 1 | サポートされるメソッド | 抽象メソッドと具象メソッド(実装ありのメソッド)の両方を持つことができます。 | 具象メソッドのみを持つことができます。抽象メソッドが1つでも含まれると、そのクラスは自動的に抽象クラスになります。 |
| 2 | インスタンス化 | newキーワードを使ってインスタンス化することはできません。 | newキーワードを使って直接インスタンス化できます。 |
| 3 | 抽象メソッド | 抽象メソッドを持っても持たなくてもかまいません。 | 抽象メソッドを持つことはできません。 |
| 4 | final宣言 | finalクラスとして宣言することはできません(継承されることを前提とするため)。 | finalとして宣言することができます。 |
| 5 | 宣言時のキーワード | abstractキーワードを付けて宣言します。 | 宣言時にabstractキーワードは不要です。 |
| 6 | 継承 | extendsキーワードで別のクラスを継承でき、インターフェースを実装することもできます。 | 同様にextendsキーワードで別のクラスを継承できます。 |
| 7 | インターフェースとの関係 | インターフェースを実装できますが、インスタンス化には具象的な子クラスが必要です。 | インターフェースのすべてのメソッドを実装すれば、すぐに利用できます。 |
抽象クラスと具象クラスのサンプルコード
次の例では、抽象クラス Cat が抽象メソッド eat() を定義し、それを具象クラス Lion がオーバーライドして実装しています。
JavaTester.java
public class JavaTester {
public static void main(String args[]) {
Cat lion = new Lion();
lion.eat();
}
}
abstract class Cat {
abstract public void eat();
}
class Lion extends Cat {
public void eat() {
System.out.println("Lion eats");
}
}
実行結果
Lion eats
コードのポイント解説
- 抽象クラス
Catはabstractキーワードで宣言されており、eat()メソッドの実装を子クラスに委ねています。 Cat cat = new Cat();のように抽象クラスを直接インスタンス化しようとすると、コンパイルエラーになります。- 具象クラス
LionはCatを継承し、eat()を具体的に実装しているため、new Lion()でインスタンスを生成できます。 - このように、共通の振る舞いの枠組みを抽象クラスで定義し、具体的な処理を具象クラスに任せることで、柔軟で拡張性の高い設計が可能になります。
まとめ
抽象クラスは「設計のテンプレート」として役割を果たし、インスタンス化はできない一方で、抽象メソッドと具象メソッドを混在させられます。対照的に、具象クラスはすべてのメソッドが実装済みで、直接インスタンス化できる点が最大の特徴です。用途に応じて両者を使い分けることが、Javaにおける良好なオブジェクト指向設計への第一歩となります。
-
JavaのExceptionクラスとErrorクラスの違いを徹底解説
JavaにおけるException(例外)クラスとError(エラー)クラスは、どちらもjava.lang.Throwableクラスのサブクラスです。しかし、両者には重要な違いがあります。例外はプログラム側で捕捉・処理できるのに対し、エラーはアプリケーションで対処すべきではない重大な問題を表します。 ExceptionとErrorの共通点 両クラスともThrowableクラスを継承しており、throw文によってスロー可能なオブジェクトという点では共通しています。ただし、その性質と扱い方には大きな違いがあります。 主な違い 1. 処理の可否 例外は実行時に発生する論理的なエラーを表すオブジ
-
Javaの抽象クラスとは?基本ルールと実装例をわかりやすく解説
Javaの抽象クラスとは宣言に「abstract」キーワードを含むクラスは、抽象クラスと呼ばれます。抽象クラスは、継承によって利用されることを前提とした設計用のクラスであり、オブジェクト指向プログラミングにおける重要な概念の一つです。抽象クラスの主な特徴抽象クラスには、抽象メソッド(本体を持たないメソッド。例:public void get();)が含まれる場合もあれば、含まれない場合もあります。ただし、クラス内に1つでも抽象メソッドが存在する場合、そのクラスは必ず abstract として宣言しなければなりません。abstract として宣言されたクラスは、インスタンス化(newによるオブジ