抽象クラスとインターフェースを調べています。
完全抽象クラスとインターフェースに違いがあるかどうか教えてもらえますか?
確かに違いはあります。私が考えることができる最初のいくつかは
抽象クラスにはメソッドの実装を含めることができますが、インターフェイスには含めることができません。
抽象クラスとインターフェイス
インターフェイスとは異なり、抽象クラスには静的でも最終でもないフィールドを含めることができ、実装されたメソッドを含めることができます。このような抽象クラスは、部分的な実装を提供し、実装を完了するためにサブクラスに任せることを除いて、インターフェイスに似ています。抽象クラスに抽象メソッド宣言のみが含まれている場合は、代わりにインターフェイスとして宣言する必要があります。
複数のインターフェイスは、相互に何らかの形で関連しているかどうかに関係なく、クラス階層内の任意の場所でクラスによって実装できます。たとえば、Comparable または Cloneable について考えてみてください。
比較すると、抽象クラスは、実装の一部を共有するためにサブクラス化されるのが最も一般的です。単一の抽象クラスは、多くの共通点 (抽象クラスの実装部分) を持つ類似のクラスによってサブクラス化されますが、いくつかの相違点 (抽象メソッド) もあります。
完全抽象クラスとインターフェースの間に違いはありますか?
すべてのメソッドが抽象的である場合、動作はほぼ(正確ではない) 同じですが、違いがあります。主な理由は、クラスが複数の (抽象かどうかに関係なく) クラスから拡張することはできませんが、多くのインターフェイスを実装できるためです。また、インターフェイスでフィールドをプライベートにすることはできません。
Oracle のドキュメントでは、完全に抽象化されたクラスをインターフェイスに変換することが提案されていることに注意してください。
インターフェイスで:
変数、メソッドのみを宣言できますが、このインターフェイスには定義が書かれていません
抽象クラス : クラスが抽象クラスとして宣言されている間、宣言には抽象メソッドが含まれる場合と含まれない場合があります。抽象クラスでは、定義も記述できます。インターフェイスとは異なり、抽象クラスには、静的でも最終でもないフィールドを含めることができます。
このような抽象クラスは、部分的な実装を提供し、実装を完了するためにサブクラスに任せることを除いて、インターフェイスに似ています。