この記事では、Javaでのインターフェイスと抽象クラスの使用について説明します。次のように、参照のために共有してください。
オブジェクト指向の概念では、すべてのオブジェクトがクラスで描かれているが、すべてのクラスがオブジェクトを記述するために使用されるわけではないことを知っています。クラスに具体的なオブジェクトを説明するのに十分な情報が含まれていない場合、そのようなクラスは抽象クラスです。
抽象クラスは、問題フィールドの分析と設計で得られる抽象的な概念を表すためによく使用されます。それらは、異なると思われるが本質的に同じ一連の具体的な概念の抽象化です。それらをインスタンス化することはできません(具体的なものを思いつくことはできません)ので、抽象化と呼びます。
たとえば、「フルーツ」を説明したい場合、それは抽象化です。質量や体積(果物には質量があります)などのいくつかの一般的な特性がありますが、特性がありません(リンゴとオレンジは果物であり、独自の特性があります)。果物を表すことができる唯一のものを思いつくことはできません(リンゴとオレンジは果物を表すことができないため)。抽象クラスを使用して説明できるため、抽象クラスをインスタンス化することはできません。 「リンゴ」を説明するために特定のクラスを使用すると、このクラスは「フルーツ」を説明する抽象クラスを継承できます。私たちは皆、「リンゴ」が一種の「果物」であることを知っています。
オブジェクト指向のフィールドでは、抽象クラスが主にタイプの非表示に使用されます。一連の動作の固定抽象説明を作成できますが、この一連の動作は、可能な具体的な実装方法を持つことができます。この抽象的な説明は抽象的なクラスであり、この具体的な実装のこのセットは、この抽象クラスのすべての派生クラスとして現れます。
インターフェイスと抽象クラスのすべての抽象的なメソッドは、具体的な実装で実装することはできませんが、サブクラスにすべての抽象的なメソッドを実装する必要があります({}で空であっても、関数本文が必要です)。 Javaデザイナーは、抽象的な方法の柔軟性を考慮し、各サブクラスは自分のニーズに応じて抽象的な方法を実装できます。
抽象クラスの定義は次のとおりです。
パブリックアブストラクトクラスAbstractClass //少なくとも1つの抽象的なメソッドがあります{public int t; //通常のデータメンバーpublic abstract void method1(); //要約方法、抽象クラスのサブクラスは、クラスの抽象クラスに抽象的なメソッドを実装する必要がありますパブリックアブストラクトvoid method2(); public void method3(); //非アブストラクトメソッドpublic int method4(); public int method4(){... //要約クラスは、非アブストラクトメソッドメソッドのデフォルト動作、つまりメソッドの具体的な実装を割り当てることができます} public void method3(){... //抽象クラスは、非アブストラクトメソッドメソッドのデフォルト動作を割り当てることができます。インターフェイスの定義は次のとおりです。
パブリックインターフェイスインターフェイスインターフェイス{static final int i; //インターフェイスには通常のデータメンバーはありません。修正できない静的データメンバーのみ。静的手段グローバル、最終手段は変更できません。静的な最終的な変更なしで変更でき、静的および最終的な公共void method1()として暗黙的に宣言されます。 //インターフェイス内のメソッドは抽象的なメソッドでなければならないため、public void method2()では抽象的な変更は必要ありません。 //メソッドのデフォルトの動作をインターフェイスに割り当てることはできません。つまり、メソッドの特定の実装はありません}要するに、抽象クラスは不完全なクラスであり、インターフェイスは抽象的なメソッド宣言と修正できない静的データのコレクションにすぎませんが、どちらもインスタンス化できません。
ある意味では、インターフェイスは抽象クラスの特別な形式です。 Java言語では、抽象クラスは相続関係を表しています。クラスは1つの抽象クラスのみを継承でき、クラスは複数のインターフェイスを実装できます。多くの場合、属性の継承を意図的に表現する必要がない場合、インターフェイスは実際に抽象クラスを置き換えることができます。
さらに理解するために、Javaが抽象クラスとインターフェイスを導入する目的のために、専門家から得た答えは次のとおりです。
1.クラスの階層の観点から見ると、抽象クラスはレベルの最上位にありますが、実際の設計では、抽象クラスが一般的に後で表示されるはずです。なぜ?実際、抽象クラスの獲得は、数学の一般的な要因を抽出するようなものです。AX+BX、Xは抽象クラスです。以前の式がない場合、xが一般的な要因であるかどうかをどのようにして知ることができますか?この点で、それはまた、世界を理解するプロセス、最初に具体的、次に抽象的なものに沿っています。したがって、多くの特定の概念を取得し、設計プロセスで共通点を見つける場合、この共通性のコレクションが抽象的なクラスであることは事実です。
2。表面的には、インターフェイスは抽象クラスに非常に似ていますが、その使用法は完全に異なります。その基本的な機能は、いくつかの無関係なクラス(概念)を集めて、新しい中央で操作可能な「新しいクラス」を形成することです。私が学生に与える典型的な例は、「ドライバー」です。誰がドライバーになれますか?運転免許証を取得している限り、誰でもそれを行うことができます。あなたが学生、ホワイトカラーの労働者、ブルーカラーの労働者、または上司であるかどうかは気にしません。あなたが運転免許証を持っている限り、あなたは運転手です。
インターフェイスdriverlicence {license getlicence(); } class StudentDriver拡張学生の実装{} driverlicence {} class whtiecollaremployeedriver拡張whtiecollaremployee emplmess driverlicence {} class bluecollareedriver extend「車」クラスを定義すると、「ドライバー」を指定できます。
クラスカー{setDriver(driverlicenceドライバー);}現時点では、車のオブジェクトはドライバーが何をしたかを気にしませんでした。彼らの唯一の一般的なポイントは、彼らが運転免許証を取得したことでした(両方ともDriverlicenceインターフェイスを実装しました)。これはインターフェイスの最も強力な部分である必要があり、抽象クラスと比較できます。
要約:
抽象クラスは、具体的なクラスの共通の要因を抽出しますが、インターフェイスは無関係なクラスを共通のグループに「ハッシュ」することです。通常、複数のインターフェイスを使用するという良い習慣を身に付けます。結局のところ、JavaはC ++とは異なり、単一の継承ですが、抽象クラス(GOTOに多少似た)を使用する場合は使用する必要があります。
この記事がみんなのJavaプログラミングに役立つことを願っています。