ホームページ >Java >&#&チュートリアル >インターフェイスと抽象クラス – いつどちらを使用するか?
インターフェイスをいつ使用するか、いつ抽象クラスを使用するかをどのように決定しますか?分解してみましょう。
複数の実装: 複数のクラスが同じメソッドのセットを異なるロジックで実装することが予想される場合は、インターフェイスを使用します。たとえば、Car と Boat の両方で実装され、それぞれ独自の「運転」方法を持つインターフェース Drivable があるとします。
疎結合: インターフェイスは、コードを分離したい場合に最適です。インターフェースでメソッドを定義すると、それらのメソッドを使用するコードを変更せずに、異なる実装を交換できます。
共有コード: すべてのサブクラス間で共有する必要がある共通の動作 (メソッド) があるが、特定のメソッドを必須にすることで特定のルールを強制したい場合は、抽象クラスを使用します。実装されました。
単一継承: クラスが 1 つの親クラスからのみ継承する必要があり、この親クラスが何らかの基本機能を提供する必要があることがわかっている場合は、抽象クラスが適しています。
>一般に、インターフェースは、メソッド呼び出しの間接化により、パフォーマンスが若干低下する可能性があります (特に Java 8 より前)。ただし、その違いは通常は無視できるものであり、パフォーマンスが重要な状況でない限り、決定要因となるべきではありません。
さまざまなタイプの支払い方法に対応するシステムを設計していると想像してください。
インターフェイスの例: CreditCard、PayPal、Bitcoin などのさまざまな支払い方法に対応する Payable インターフェイスを定義します。それぞれが processPayment() メソッドを異なる方法で実装します。
抽象クラスの例: また、すべてのオンライン支払い方法をグループ化したいとします。支払いゲートウェイに接続するためのメソッドを実装する抽象クラス OnlinePayment を作成できますが、特定の支払い処理メソッド (processPayment()) は CreditCard や PayPal などのサブクラスによって定義されます。
public interface Payable { void processPayment(double amount); } public abstract class OnlinePayment implements Payable { void connectToGateway() { System.out.println("Connecting to online payment gateway..."); } } public class CreditCard extends OnlinePayment { public void processPayment(double amount) { connectToGateway(); System.out.println("Processing credit card payment of " + amount + " €"); } }
さまざまなタイプのユーザー (管理者、ゲスト、登録済み) がいるシナリオを想定して、インターフェイス、抽象クラス、またはその両方を使用するかどうかを考えてください。単純な構造を設計し、Java で実装します。
インターフェイスと抽象クラスのどちらを選択するかは必ずしも簡単ではありませんが、それぞれの長所と短所を理解することは、設計に最適な決定を下すのに役立ちます。インターフェイスは柔軟性と複数の動作を実装する機能を提供し、抽象クラスは共有機能を備えた強力な基盤を提供します。
以上がインターフェイスと抽象クラス – いつどちらを使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。