Javaのインターフェースと抽象クラスの違い
- 实现方式不同:接口是用关键字interface定义的,抽象类是用关键字abstract定义的。
- 継承方法が異なります。クラスは複数のインターフェイスを実装できますが、抽象クラスを継承できるのは1つだけです。
- メンバ変数はインターフェイスと抽象クラスで異なります。インターフェイスには定数のみ宣言できますが、インスタンス変数は宣言できません。抽象クラスにはインスタンス変数が含まれます。
- メソッドの実装方法が異なる。インターフェースのメソッドは暗黙的に抽象的で宣言のみで実装はできない。抽象クラスのメソッドは実装あり/なしの両方がある。
- コンストラクタの有無:インターフェイスはコンストラクタを持たない。抽象クラスはコンストラクタを持つことができる。
- インターフェースではインターフェース実装クラスから継承またはオーバーライド可能なデフォルトメソッドを定義できますが、抽象クラスではデフォルトメソッドを定義できません。
- 呼び出し方が違う。インターフェースのメソッドは、実装クラスのインスタンス経由で呼び出す必要がある。抽象クラスのメソッドは、インスタンス経由でも、クラス名経由でも呼び出せる。
インターフェースとは、振る舞いを定義するためのもの、それに対し抽象クラスとは、継承するためのもの、共通の振る舞いを持ち、具体的なメソッドを含むことができます。