抽象クラスとインターフェース:相違点と類似点
公開: 2021-06-02ソフトウェアエンジニアリングの面接に参加している場合、期待できる1つの質問は、抽象クラスとインターフェイスの違いと類似点です。
抽象クラスとインターフェースは、オブジェクト指向プログラミングの基本的なブロックです。 これらは両方とも、プログラマーがOOPのより重要な概念の1つである抽象化を実装できるようにします。 抽象クラスとインターフェースはどちらも抽象化の概念を実装するために使用されますが、2つは実装が異なり、ユースケースも異なります。 抽象クラスとインターフェースは初心者に似ているように見えるかもしれませんが、互換的に使用することはできません。
この記事では、抽象クラス、インターフェース、および2つの類似点と相違点のニュアンスを見ていきます。 抽象クラスとインターフェースは単なる概念であり、任意のオブジェクト指向プログラミング言語で実装できることに注意してください。 一貫性を保つために、この記事で概念を説明するために使用する構文はすべてJavaのものになります。
この記事の終わりまでに、抽象クラスとインターフェースを明確に区別し、特定の場合にどちらを実装するかを明確に区別できます。
目次
インターフェース–それらは何ですか?
OOPのインターフェースは、さまざまなシステム間の動作の契約として簡単に理解できます。 これが意味することは、インターフェースを実装するクラスは、インターフェースのすべてのメソッドに何らかの実装を提供する必要があるということです。
インターフェイスのすべてのメソッドは、パブリックで抽象的である必要があります。 したがって、インターフェースは「純粋に抽象的な」クラスとしても理解されます。
インターフェイスの定義は次のようになります。
パブリックインターフェースEating{
public void chewing();
public void digesting();
}
ご覧のとおり、定義には、名前の前にキーワードinterfaceを追加することが含まれています。 さらに、このインターフェイスでは2つの抽象パブリックメソッドが定義されています。したがって、上記のインターフェイスを実装するクラスは、 chewing()とdigesting()の実装を提供する必要があります。 関数。
次に、抽象クラスとは何かを見てみましょう。次に、両方の概念をまとめて、それらの類似点と相違点をより明確にします。
抽象クラス–それらは何ですか?
abstractキーワードは、宣言の中で常に抽象クラスの前に付けられます。 さらに、抽象クラスは、派生的な非抽象クラス用に作成されたガイドラインとして機能します。 その意味で、非抽象メソッドの適切な実装を提供しながら、宣言に少なくとも1つの抽象メソッドを含める必要があります。
抽象クラスの定義は次のようになります。
パブリック抽象クラスEating{
public void getReady(){
System.out.println( "私はすべて食べる準備ができています");
}
public abstract void start();
public abstract void stop();
}
抽象クラスの定義からわかるように、getReady()関数は非抽象関数ですが、 start(); およびstop(); 関数は抽象的です。
抽象クラスの実装に関しては、次の点に注意する必要があります。
- 抽象クラスはインスタンス化できません。 つまり、抽象クラスからオブジェクトを作成することはできません。
- 抽象クラスを拡張する子クラスは、抽象クラスで説明されているすべての抽象メソッドを実装する必要があります。 子クラスがすべての抽象メソッドを実装していない場合は、子クラスも抽象クラスとして宣言する必要があります。
インターフェイスと抽象クラスの基本がわかったので、それらの違い、類似点、およびどのアプローチを使用する必要があるかについて説明しましょう。
インターフェイスと抽象クラスの相違点と類似点
インターフェイス内で宣言されたすべてのメソッドは暗黙的にパブリックで抽象的ですが、抽象クラスは、部分的、パブリック、静的、保護など、メソッドのあらゆる種類の修飾子を持つことができます。
さらに、任意のユーザー定義クラスは複数のインターフェースを実装できます。 ただし、実装できる抽象クラスは1つだけです。 インターフェイスと抽象クラスの両方にメソッドと変数を含めることができますが、どちらもインスタンス化できません。 インターフェイス内で宣言されたすべての変数はfinalです。 ただし、抽象クラスで宣言された変数は非最終である可能性があり、ユーザー定義クラスによって変更できます。
これは、抽象クラスとインターフェースのすべての主な違いの要約です。
パラメータ | 抽象クラス | インターフェース |
キーワード | 抽象キーワードが使用されます。 | interfaceキーワードが使用されます。 |
変数のタイプ | 最終変数、非最終変数、静的変数、および非静的変数を処理できます。 | デフォルトでは、静的変数と最終変数のみを定義できます。 |
最終変数 | 最終変数が宣言されている場合とされていない場合があります。 | デフォルトでは、変数はfinalとして宣言されます |
アクセス修飾子 | private、public、staticなどのすべての修飾子を使用できます。 | パブリックアクセス修飾子のみを持つことができます。 |
メソッドの種類 | 抽象メソッドと非抽象メソッドの両方を持つことができます。 | 抽象メソッドのみを持つことができます。 |
スピード | 速い | 余分な間接参照が必要になるため、低速です。 |
抽象クラスとインターフェース:どちらをいつ選択するか?
コードにいくつかの実装を提供するための基本クラスが必要な場合は、抽象クラスが最適です。 たとえば、クラス内のいくつかの変数を初期化して、すべての派生クラスが使用できるメソッドで論理アクションを実行したい場合があります。 このようなシナリオでは、抽象クラスを使用するのが最善の策です。
ただし、クラスにアドオンの動作を提供する必要がある場合は、インターフェイスを選択する必要があります。 実際には、インターフェースと抽象クラスの両方が同じ機能を提供します。 ただし、コーディング標準を検討すると違いが生じます。 インターフェイスは、OOPの2つの重要な原則である抽象化とポリモーフィズムを実現するのに役立ちます。 また、緊密に結合されているのではなく、緩く結合されたコードを維持することもできます。
ここで、インターフェースと抽象クラスのユースケースを要約しましょう!
いつインターフェースを使用しますか?
インターフェイスを使用すると、プログラマーはクラスの追加の動作パターンを構築できます。 これにより、誰かが最初から始めて、必要なクラスにインターフェイスを実装できます。 したがって、インターフェースの目的は偶発的なものであり、コードに追加する必要があります。 したがって、クラスに追加の機能を提供したい場合で、インターフェイスのメソッドを公開してもかまわない場合(すべてのメソッドが公開されるため)、インターフェイスの実装を進める必要があります。
抽象クラスを使用するのはいつですか?
インターフェイスとは対照的に、抽象クラスはより多くの構造を提供します。 抽象クラスには、いくつかのメソッドのデフォルトの実装が付属しており、抽象クラスを完全に実装するための便利なツールも提供します。 抽象クラスを使用して、関連するクラスのセット全体にいくつかの共通機能を提供すると同時に、デフォルトのメソッド実装のための十分な余地を残す必要があります。
世界のトップ大学からオンラインでソフトウェア開発コースを学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。
結論は
抽象化はOOPの重要なコンポーネントであり、抽象クラスとインターフェイスの両方を使用すると、コードである程度の抽象化を実現できます。 ただし、長所と短所を知らずにそれらを交換可能に使用することは間違いであり、コード(および最終的にはソフトウェア)がバグが多く遅延する可能性があります。
この記事が、抽象クラスとインターフェースの重要な違いを、構文に関する知識とそれらが実装されている場所とともに理解するのに役立つことを願っています。
抽象クラスとインターフェースの詳細に興味がある場合は、フルスタックソフトウェア開発におけるupGrad&IIIT-BのエグゼクティブPGプログラムをチェックしてください。これは、働く専門家向けに設計されており、500時間以上の厳格なトレーニング、9以上のプロジェクト、および割り当てを提供します。 、IIIT-B卒業生のステータス、実践的な実践的なキャップストーンプロジェクト、トップ企業との雇用支援。
それでもニュアンスについて混乱している場合は、下にコメントをお送りください。すぐにご連絡いたします。
Javaの抽象クラスとは何ですか?
抽象クラスは、インスタンス化できず、継承できないクラスです。 それ自体には重要な操作はなく、具象クラスのスーパークラスとしてのみ機能します。 専門化を提供するためにのみ使用されます。 車のクラスとそのサブクラスのスポーツカーとハッチバックの例を考えてみましょう。 抽象クラスCarは、すべてのサブクラスの親クラスと見なすことができます。
Javaで抽象クラスを使用するのはいつですか?
抽象クラスの主な目的は、類似したクラスのグループに基本クラスを提供することです。 抽象クラスを拡張するすべてのクラスは、抽象クラスで定義されたメソッドを実装する必要があります。 抽象クラスは主に、クラスが実装することが期待される特定のインターフェースを定義するために使用されます。 抽象クラスは、メソッドを定義できるスーパークラスとして使用でき、必要なメソッドを子クラスに実装して、子クラスに継承できます。 抽象クラスを使用すると、子クラスで使用できる共通コードを定義できるため、より効率的になります。
Javaの抽象クラスとインターフェースの違いは何ですか?
抽象クラスとインターフェースは、クラスが実装するためのすべてではないがいくつかのメソッドを含むクラスを定義する2つの方法です。 これら2つは静的に異なり、異なる方法で実現されます。 しかし、動的な使用法に関しては、それらは同じです。 インターフェイスは、定数と抽象メソッド宣言のみを含む単なるクラスです。 Javaでのインターフェースの実際の実装はありません。 したがって、インターフェースは完全にダミーのクラスです。 インターフェイスは、クラス内のメソッドと定数のコントラクトを定義するために使用されます。 クラスに同じメソッドと定数を実装するように強制します。 このメソッドは、抽象クラスまたはサブクラスのいずれかに実装できます。 抽象クラスは、抽象メソッドを含むクラスです。 サブクラスは、これらの抽象メソッドを実装します。 抽象クラスとインターフェースを一緒に使用して、クラス内の特定のコントラクトを実施できます。