-6

抽象クラスとインターフェースを調べています。

完全抽象クラスとインターフェースに違いがあるかどうか教えてもらえますか?

4

5 に答える 5

3

Google はあなたの友達です。ぜひご利用ください。

于 2012-06-13T15:34:30.230 に答える
2

確かに違いはあります。私が考えることができる最初のいくつかは

  • 複数のインターフェースを実装できる複数の抽象クラスを継承することはできません
  • インターフェイスのデコレーターを作成できますが、抽象クラスのデコレーターは作成できません
  • 抽象クラスでデフォルトの実装を提供できますが、インターフェイスでは提供できません。これにより、インターフェースでは不可能な下位互換性のある方法で抽象クラスを拡張できます。
于 2012-06-13T15:36:22.427 に答える
1

抽象クラスにはメソッドの実装を含めることができますが、インターフェイスには含めることができません。

于 2012-06-13T15:37:24.240 に答える
1

Java ドキュメントを読んでください。

抽象クラスとインターフェイス

インターフェイスとは異なり、抽象クラスには静的でも最終でもないフィールドを含めることができ、実装されたメソッドを含めることができます。このような抽象クラスは、部分的な実装を提供し、実装を完了するためにサブクラスに任せることを除いて、インターフェイスに似ています。抽象クラスに抽象メソッド宣言のみが含まれている場合は、代わりにインターフェイスとして宣言する必要があります。

複数のインターフェイスは、相互に何らかの形で関連しているかどうかに関係なく、クラス階層内の任意の場所でクラスによって実装できます。たとえば、Comparable または Cloneable について考えてみてください。

比較すると、抽象クラスは、実装の一部を共有するためにサブクラス化されるのが最も一般的です。単一の抽象クラスは、多くの共通点 (抽象クラスの実装部分) を持つ類似のクラスによってサブクラス化されますが、いくつかの相違点 (抽象メソッド) もあります。

完全抽象クラスとインターフェースの間に違いはありますか?

すべてのメソッドが抽象的である場合、動作はほぼ(正確ではない) 同じですが、違いがあります。主な理由は、クラスが複数の (抽象かどうかに関係なく) クラスから拡張することはできませんが、多くのインターフェイスを実装できるためです。また、インターフェイスでフィールドをプライベートにすることはできません。

Oracle のドキュメントでは、完全に抽象化されたクラスをインターフェイスに変換することが提案されていることに注意してください。

于 2012-06-13T15:41:17.333 に答える
1

インターフェイスで:

変数、メソッドのみを宣言できますが、このインターフェイスには定義が書かれていません

抽象クラス : クラスが抽象クラスとして宣言されている間、宣言には抽象メソッドが含まれる場合と含まれない場合があります。抽象クラスでは、定義も記述できます。インターフェイスとは異なり、抽象クラスには、静的でも最終でもないフィールドを含めることができます。

このような抽象クラスは、部分的な実装を提供し、実装を完了するためにサブクラスに任せることを除いて、インターフェイスに似ています。

于 2012-06-13T15:41:33.157 に答える