abstract 修飾子を含むクラスは抽象クラスであり、抽象クラスはインスタンス オブジェクトを作成できません。抽象メソッドを含むクラスは抽象クラスとして定義する必要がありますが、抽象クラスのメソッドは抽象である必要はありません。抽象クラスで定義された抽象メソッドは具象サブクラスで実装する必要があるため、抽象コンストラクターや抽象静的メソッドは存在できません。サブクラスが抽象親クラスのすべての抽象メソッドを実装していない場合は、サブクラスも抽象型として定義する必要があります。
インターフェイスは抽象クラスの特殊なケースであると言え、インターフェイス内のすべてのメソッドは抽象でなければなりません。インターフェイスのメソッド定義はデフォルトで public abstract 型に設定され、インターフェイスのメンバー変数型はデフォルトで public staticfinal に設定されます。
2 つの文法の違いを比較してみましょう。
1. 抽象クラスはコンストラクターを持つことができますが、インターフェイスはコンストラクターを持つことができません。
2. 抽象クラスには通常のメンバ変数が存在できますが、インターフェイスには通常のメンバ変数は存在しません。
3. 抽象クラスには、非抽象の通常メソッドを含めることができます。インターフェイス内のすべてのメソッドは抽象でなければならず、非抽象の通常メソッドを含めることはできません。
4. 抽象クラスの抽象メソッドのアクセス タイプは、public、protected、および (デフォルトのタイプですが) にすることができます。
Eclipse ではエラーは報告されませんが、機能しないはずです)。ただし、インターフェイス内の抽象メソッドはパブリック型のみにすることができ、デフォルトはパブリック抽象型です。
5. 抽象クラスには静的メソッドを含めることができますが、インターフェイスには静的メソッドを含めることはできません。
6. 抽象クラスとインターフェイスの両方に静的メンバー変数を含めることができます。抽象クラスの静的メンバー変数のアクセス型は任意ですが、インターフェイスで定義できる変数は public static Final 型のみであり、デフォルトは public static Final 型です。
7. クラスは複数のインターフェースを実装できますが、継承できる抽象クラスは 1 つだけです。
アプリケーションにおける 2 つの違いについて話しましょう。
インターフェイスはシステム アーキテクチャの設計方法においてより重要な役割を果たし、主にモジュール間の通信コントラクトを定義するために使用されます。抽象クラスはコードの実装で役割を果たし、コードの再利用を実現できます。たとえば、テンプレート メソッドの設計パターンは、プロジェクト内のすべてのサーブレット クラスが同じメソッドを使用して権限を決定し、記録する必要があると想定されています。アクセスのログと例外処理を行うと、すべてのサーブレットがこの抽象基本クラスを継承するように、アクセス許可の判定、アクセス ログの記録、および例外処理のコードが完成します。それぞれのビジネス ロジック コードを完成させるだけです。疑似コードは次のとおりです。