抽象クラスとインターフェイスは、2つの主要な構成要素です。の 。どちらも主に抽象化に使用されますが、互いに大きく異なり、互換的に使用することはできません。この記事では、Javaの抽象クラスとインターフェースの違いを理解しましょう。
この記事で説明するトピックは次のとおりです。
の抽象クラスとインターフェースの違いを理解するには 、抽象クラスとは何か、インターフェイスとは何かを知る必要があります。それで、それらが何であるかを議論することから始めましょう。
Javaの抽象クラスとは何ですか?
どのプログラミング言語でも、 抽象化 関係のない詳細をユーザーから隠して、本質的な詳細のみに焦点を合わせ、効率を高めて複雑さを軽減することを意味します。 Javaでは、抽象化は次を使用して実現されます 抽象クラス 。抽象クラスは、サブクラスの共通の特性をキャプチャし、抽象メソッドを含む場合と含まない場合があります。インスタンス化することはできませんが、サブクラスによってのみスーパークラスとして使用できます。抽象クラスを示すサンプルプログラムは次のとおりです。
注意: アン 抽象メソッド は、適切に実装されておらず、追加されるメソッドです。に不完全 クラス 。
package MyPackage // abstract class abstract class Animal {String AnimalName = '' Animal(String name){this.AnimalName = name} //非抽象メソッドを宣言する//デフォルトの実装があるpublicvoid BasicInfo(String details){System。 out.println(this.AnimalName + '' + details)} //サブクラスによって実装される抽象メソッドabstractpublic void habitat()abstract public void respiration()} class Terrestrial extends Animal {//コンストラクターTerrestrial(String name){super(name)} @Override public void habitat(){System.out.println( 'leave on land and')} @Override public void respiration(){System.out.println( 'respire肺または気管を介して。 ')}}クラスAquatic extends Animal {//コンストラクタAquatic(String name){super(name)} @Override public void habitat(){System.out.println(' It Leaves in water and ') } @Override public void respiration(){System.out.println( '鰓またはその皮膚を通して呼吸します。')}} class AbstractClassDemo {public static voi d main(String [] args){//陸生クラスのオブジェクトを作成し、//動物クラス参照を使用します。動物object1 = new Terrestrial( 'Humans')object1.BasicInfo( 'are terrestrial beings、they')object1.habitat()object1.respiration()System.out.println( '')//サークルクラスAnimalのオブジェクトを作成するobject2 = new Aquatic( 'Fishes')object2.BasicInfo( 'are aqautic beings、they')object2.habitat()object2.respiration()}}
出力
人間は陸生生物であり、陸に出て肺や気管から呼吸します。魚は水生生物であり、水中に残り、鰓や皮膚を通して呼吸します。
ザ・ BasicInfo() によって共有されるメソッドです 地上 そして 水生 クラス。以来 動物のクラス 開始できません。オブジェクトを作成しています 地上 そして 水生 プログラミング目的のクラス。次は、インターフェースです。
Javaのインターフェース
達成する別の方法 抽象化 Javaでは インターフェイス 。インターフェイスは抽象的なメソッドのコレクションであり、具体的なものはありません 、抽象クラスとは異なります。ただし、抽象クラスとは異なり、インターフェースはJavaで完全な抽象化を提供します。クラスと同じように、メソッドと変数の両方を持つことができます。ただし、インターフェイスで宣言されたメソッドはデフォルトで抽象的です。これが 抽象クラスのデモンストレーション:
パッケージMyPackageインターフェースAnimals {//抽象メソッドvoidhabitat()void respiration()}クラスTerrestrialAはAnimalsを実装します{String AnimalName = '' //コンストラクターTerrestrialA(String name){this.AnimalName = name} @Override public void habitat() {System.out.println(this.AnimalName + '土地に残して')} @Override public void respiration(){System.out.println( '呼吸または気管。')}}クラスAquaticAはAnimalsを実装します{String AnimalName = '' //コンストラクタAquaticA(String name){this.AnimalName = name} @Override public void habitat(){System.out.println(this.AnimalName + 'Leave in water and')} @Override public void respiration (){System.out.println( '鰓またはその皮膚を通して呼吸します。')}} class JavaInterfaceDemo {public static void main(String [] args){//地上クラスのオブジェクトを作成します//動物クラス参照を使用します。 Animals object1 = new TerrestrialA( 'Humans')object1.habitat()object1.respiration()System.out.println( '')//サークルクラスのオブジェクトを作成するAnimals object2 = new AquaticA( 'Fishes')object2.habitat ()object2.respiration()}}
出力
人間は陸地を離れ、肺や気管から呼吸します。魚は水中に残り、鰓やその皮膚を通して呼吸します。
間に共通のコードがない場合 クラス 、その後、インターフェイスに行くことができます。インターフェイスには非抽象メソッドがないため、クラスの青写真に似ています。
上記のコンテンツから、抽象クラスとインターフェイスの主な違いに気づいたかもしれません。 。これは、抽象クラスとは異なり、インターフェイスが完全に提供します 抽象化 Javaで。それでは、先に進んで他の違いをリストアップしましょう。
抽象クラスとインターフェース
次の表に、抽象クラスとインターフェイスの主な違いを示します。
パラメータ | 抽象クラス | インターフェース |
デフォルトのメソッド実装 | デフォルトのメソッド実装を持つことができます | インターフェースは純粋な抽象化を提供し、実装することはできません javaはdoubleをintに変換します |
変数 | 非最終変数が含まれる場合があります。 | インターフェイスで宣言された変数は、デフォルトでfinalです |
使用したキーワード | 抽象クラスは、キーワード「extends」を使用して拡張できます。 | インターフェイスは、キーワード実装を使用して実装する必要があります |
アクセス修飾子 | できるpublic、protected、private、およびdefault修飾子があります | インターフェイスメソッドはデフォルトでパブリックです。他のアクセス修飾子を使用することはできません |
実装のスピード | インターフェイスよりも高速です | インターフェイスはやや遅く、追加の間接参照が必要です |
通常のクラス | 1つの抽象クラスのみを拡張できます | 複数のインターフェースを実装できます |
コンストラクター | 抽象クラスはコンストラクターを持つことができます | インターフェイスにコンストラクターを含めることはできません |
多重継承 | 抽象クラスは別のクラスを拡張でき、複数のJavaインターフェースを実装できます | インターフェイスは別のJavaインターフェイスのみを拡張できます |
さて、Javaの抽象クラスとインターフェースの主な違いです。しかし、これら2つのうちどちらをいつ使用するかをどのように決定しますか?
抽象クラスを使用する場合とインターフェイスを使用する場合
次の場合は、抽象クラスの使用を検討してください。
- 共有する必要のある関連クラスがある場合 同じコード行
- を定義したいとき 非静的または非最終フィールド
- あるときメソッドまたはフィールドまたは必要 アクセス修飾子 パブリック以外 (保護およびプライベートなど)
次の場合にインターフェースの使用を検討してください。
- 達成したいとき 純粋な抽象化
- 採用したい場合 複数 、すなわち、複数のインターフェースを実装する
- 特定のデータ型の動作を指定したいが、誰がその動作を実装するかについては気にしない場合。
これで、この記事は終わりです。インタビューで最もよく聞かれるJavaの質問の1つである、Javaの抽象クラスとインターフェイスの違いについて説明しました。
できるだけ練習し、経験を元に戻してください。
チェックしてください 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。私たちはあなたの旅のすべてのステップであなたを助けるためにここにいます、このJavaインタビューの質問に加えてなるために、私たちはJava開発者になりたい学生と専門家のために設計されたカリキュラムを考え出します。
質問がありますか?この「Javaマップインターフェイス」のコメントセクションで言及してください 記事と私たちはできるだけ早くあなたに返信します。