Javaの抽象クラスとインターフェースの違いは何ですか?
Javaにおける抽象クラスとインタフェースの違いは以下の通りです:
- 宣言方法:抽象クラスは「abstract」キーワードを使用して宣言され、インタフェースは「interface」キーワードを使用して宣言されます。
- 継承関係:1つのクラスは1つの抽象クラスのみを継承できますが、複数のインターフェースを実装することができます。
- コンストラクタ:抽象クラスにはコンストラクタが存在できますが、インターフェースにはコンストラクタが存在できません。
- 実装方法:抽象クラスには具体的なメソッドの実装を含めることができますが、インタフェースには抽象メソッドのみが含まれ、具体的な実装はありません。
- メンバ変数:抽象クラスにはメンバ変数を持つことができますが、インターフェースにはメンバ変数を持つことはできません。
- デフォルトメソッド:インタフェースにはデフォルトメソッド(defaultキーワードで修飾されたメソッド)を含めることができますが、抽象クラスにはデフォルトメソッドを含めることはできません。
- ポリモーフィズム:抽象クラスは親クラスとして機能し、多態性を実現するために使用されます。一方、インタフェースは実装することはできますが、継承することはできません。
総じて、抽象クラスは「何であるか」の関係を表すのに適しており、インターフェースは「何ができるか」の関係を表すのに適しています。