Javaインターフェイスと抽象クラスの類似点と相違点は何ですか?
Javaインターフェースと抽象クラスは、ともに継承と多態性を実現するための仕組みで、次のような共通点と相違点があります。
共通点:
- インターフェースも抽象クラスも継承可能:インターフェースと抽象クラスは共に他のクラスに継承することができ、そのインターフェースや抽象クラスで定義されたメソッドをサブクラスはインターフェースの実装や抽象クラスの継承によって取得できます。
- どちらも抽象メソッドを宣言できます。抽象メソッドとは実装されないメソッドのことで、サブクラスはこのメソッドを実装する必要があります。
- インスタンス化できない:インターフェースや抽象クラスは直接インスタンス化できず、インターフェースの実装や抽象クラスの継承を通じてのみ使用できる。
違い
- インターフェイスは多重継承が可能で、1つのクラスが複数のインターフェイスを実装して多重継承の効果を得られるが、抽象クラスは単一継承のみ可能。
- インターフェースは定数と抽象メソッドだけ定義できます。インターフェースは、変数と具体メソッドを持つことはできませんが、抽象クラスは変数、定数、抽象メソッド、および具体メソッドを定義できます。
- 抽象クラスにはコンストラクタと実装メソッドを持つことができます:抽象クラスにはコンストラクタを持つことができ、また具体的な実装メソッドを持つことができますが、インターフェースはコンストラクタと具体的な実装メソッドを持つことができません。
- インターフェース内で宣言された変数はデフォルトがpublic static finalだが、抽象クラス内で宣言された変数にはデフォルト修飾子はありません。
まとめ:
インタフェースとは主にクラス間の多重継承を実現するもので、定数と抽象メソッドのみを含み、変数や具体的な実装メソッドは持てません。抽象クラスとは主にクラスの共通する性質や振る舞いを定義するもので、変数、定数、抽象メソッド、具体的な実装メソッドを含めることができます。