Javaのextendsとimplementsの違いとは?継承と実装の使い分けを徹底解説
Javaプログラミングにおいて、クラスの継承やインターフェースの実装を行う際に使われるのが「extends」と「implements」という2つのキーワードです。どちらもオブジェクト指向プログラミングに欠かせない存在ですが、役割や適用されるルールには明確な違いがあります。本記事では、それぞれの特徴と使い分けのポイントをコード例とともにわかりやすく解説します。
extendsキーワードとは
「extends」は、主にクラスの継承を行うためのキーワードです。主な特徴は以下の通りです。
- あるクラスを基底クラス(スーパークラス)として、別のクラス(サブクラス)がそれを継承するために使用します。
- インターフェースが他のインターフェースを継承する場合にも使用できます。
- クラスがextendsで継承できるスーパークラスは1つだけです(Javaではクラスの多重継承がサポートされていないため)。
- 一方、インターフェースの場合は複数のインターフェースを同時に継承できます。
- サブクラスは、スーパークラスのすべてのメソッドをオーバーライドする義務はなく、必要なメソッドだけを選んでオーバーライドできます。
extendsのコード例
class Super {
.....
.....
}
class Sub extends Super {
.....
.....
}
implementsキーワードとは
「implements」は、クラスがインターフェースを実装するためのキーワードです。主な特徴は以下の通りです。
- クラスがインターフェースの機能を実際に持つために使用します。
- 1つのクラスは、同時に任意の数のインターフェースを実装できます。
- インターフェースを実装するクラスは、そのインターフェースで宣言されたすべてのメソッドを実装(オーバーライド)する必要があります。ただし、抽象クラスとして宣言する場合や、Java 8以降で導入されたデフォルトメソッドはこの限りではありません。
- implementsはあくまでインターフェースの実装専用であり、クラスの継承に使用することはできません。
implementsのコード例
public interface Animal {
}
public class Mammal implements Animal {
}
public class Dog extends Mammal {
}
extendsとimplementsの比較一覧
| 項目 | extends | implements |
|---|---|---|
| 主な用途 | クラスの継承、インターフェース間の継承 | クラスによるインターフェースの実装 |
| 複数指定の可否 | クラスは1つのみ(インターフェースは複数可) | 複数のインターフェースを同時に実装可能 |
| メソッドの実装義務 | オーバーライドは任意 | 原則、すべてのメソッドの実装が必要 |
まとめ
「extends」は既存のクラスの機能を受け継いで拡張したいときに、「implements」はインターフェースで定義した契約(メソッドの仕様)をクラスに実装させたいときに使います。両者は組み合わせて使うことも可能で、上記の例のように「Dog extends Mammal implements Animal」のような形で、継承と実装を併用する設計も一般的です。それぞれのルールを正しく理解し、場面に応じて使い分けることが、保守性の高いJavaコードを書く第一歩となります。
-
JavaにおけるThreadとRunnableの違いを徹底解説!使い分けのポイント
Javaで新しいスレッドを作成する方法は主に2つあります。1つ目はThreadクラスを継承(extends)する方法、2つ目はRunnableインターフェースを実装(implements)する方法です。それぞれの特徴と違いを理解することで、状況に応じた適切な選択ができるようになります。 スレッド作成の2つの方法 1. Threadクラスを継承する方法 Threadクラスのサブクラスとして新しいクラスを宣言し、そのサブクラス内でrun()メソッドをオーバーライドします。その後、サブクラスのインスタンスを生成し、start()メソッドを呼び出すことでスレッドが実行されます。 2. Runna
-
抽象クラスとインターフェースの違いを徹底解説
抽象クラスとインターフェースの違いとはJavaなどのオブジェクト指向プログラミング言語では、抽象クラスとインターフェースはどちらも「抽象的な型」を定義するために使用されます。しかし、両者には明確な違いがあり、適切に使い分けることがプログラム設計の質を大きく左右します。抽象クラスの特徴抽象クラスは、インスタンスメソッドとしてデフォルトの動作(具体的な実装)を持つことができます。そのため、複数の子クラスで共有する共通処理をあらかじめ実装しておくことが可能です。また、コンストラクタやインスタンスフィールド(状態)を持つこともできます。インターフェースの特徴一方、インターフェースは定数とインスタンスメ