この記事では、Javaインターフェイスと抽象クラスの使用について説明します。次のように、参照のために共有してください。
インタフェース
1 Javaは複数の継承をサポートしていないため、インターフェイスでは、クラスは1つの親クラスのみを継承することができますが、複数のインターフェイスを実装でき、インターフェイス自体は複数のインターフェイスを継承することもできます。
2インターフェイス内のメンバー変数は、デフォルトではpublic static最終タイプです。表示する必要がある初期化。
3インターフェイス内のメソッドは、デフォルトでは公開抽象的です。暗黙の宣言。
4インターフェイスにはコンストラクターがなく、インスタンス化することはできません。
5インターフェイスは別のインターフェイスを実装できませんが、複数のインターフェイスを継承できます。
6クラスがインターフェイスを実装する場合、インターフェイス内のすべての抽象的なメソッドを実装する必要があります。そうしないと、クラスは抽象クラスとして定義する必要があります。
抽象クラス
1クラスが要約として宣言されている場合、このクラスはオブジェクトを生成することができず、継承するだけで使用できます。
2抽象的なメソッドは、抽象クラスに存在する必要があります。
3抽象クラスには、一般的な変数と一般的な方法があります。
4サブクラス継承抽象クラスは、サブクラスが抽象クラスでない限り、抽象的なメソッドを実装する必要があります。
private void print(){};このステートメントは、メソッドの空の実装を表しています。
抽象void print();このステートメントは、実装なしでメソッドの抽象化を表しています。
インターフェイスと抽象クラスの違い
1インターフェイスには抽象的なメソッドのみを含めることができ、抽象クラスには通常の方法を含めることができます。
2インターフェイスは、静的定数プロパティのみを定義できます。抽象クラスは、通常の特性と静的定数特性の両方を定義できます。
3インターフェイスにはコンストラクターメソッドが含まれておらず、抽象クラスにはコンストラクターメソッドを含めることができます。
抽象クラスはインスタンス化することはできませんが、コンストラクターを持たないという意味ではありません。抽象クラスにはコンストラクターを持つことができ、代替クラスです。
1インターフェイスはコアであり、何をすべきかを定義し、多くの方法を含むが、これらの方法をどのように行うべきかを定義するものではありません。
2多くのクラスがインターフェイスを実装する場合、それぞれがコードにそれらのメソッドを実装する必要があります。
3一部のクラスの実装に共通のものがある場合、抽象クラスを抽象化して、抽象クラスがインターフェイスの共通コードを実装できるようにしますが、それらのパーソナライズされたメソッドは各サブクラスによって実装されます。
したがって、抽象クラスは、インターフェイスの実装を簡素化するように設計されています。公開方法の実装を提供するだけでなく、迅速に開発できるようにするだけでなく、緊密な結合の問題なくクラスが自分ですべての方法を実装できるようにします。
アプリケーションは非常に簡単です
1.最初にインターフェイスを定義します
2共通の部分を持つ複数のインターフェイス実装がある場合は、抽象クラスを使用して統合します。
インターフェイスと抽象クラス-Iの違いは、あなたがそれを読んだ後に混乱しないと信じています
オブジェクト指向のプログラミング言語を使用するプログラマーにとっては、「インターフェイス」という用語は馴染みがあるに違いないと思いますが、そのような疑問があるのだろうかと思います。インターフェイスの目的は何ですか?それと抽象クラスの違いは何ですか?インターフェイスの代わりに抽象クラスを使用できますか?さらに、プログラマーとして、「インターフェイス指向のプログラミング」というフレーズをよく聞く必要があります。イデオロギーの意味合いは何ですか?オブジェクト指向プログラミングとの関係は何ですか?この記事では、これらの質問に1つずつ答えます。
1。インターフェイス指向のプログラミングとオブジェクト指向プログラミングの関係は何ですか
まず、インターフェイス指向のプログラミングとオブジェクト指向プログラミングは水平ではありません。オブジェクト指向のプログラミングよりも高度な独立したプログラミングのアイデアではありませんが、オブジェクト指向の思考システムに添付され、その部分に属します。言い換えれば、それはオブジェクト指向のプログラミングシステムにおける思考の本質の1つです。
2。インターフェイスの性質
インターフェイスは、表面上はボディコードのないいくつかのメソッド定義で構成されています。ユニークな名前があり、クラスまたは他のインターフェイスによって実装できます(または継承されるとも言えます)。次の形式のように見えるかもしれません:
インターフェイスinterfaceName {void method1(); void method2(int para1); void method3(string para2、string para3); }それで、インターフェイスの本質は何ですか?または、インターフェイスの存在の意味は何ですか?次の2つの視点から考慮できると思います。
1)インターフェイスは、このインターフェイスを実装するクラスまたはインターフェイスが必要なルールのセットを指定する一連のルールです。それは「もしあなたが...あなたができるに違いない...」という自然の概念を具体化します。
たとえば、自然界では、人々は食べることができます。つまり、「あなたが人間なら、食べることができなければなりません」。次に、コンピュータープログラムでシミュレートされると、Iperson(慣習的には、インターフェイス名が「I」で始まる)インターフェイスで始まり、EAT()と呼ばれる方法があります。次に、「人間」を表すすべてのクラスがIPersonインターフェイスを実装する必要があると規定します。これは、「あなたが人間である場合、食べることができなければならない」という自然なルールをシミュレートします。
ここから、オブジェクト指向のアイデアも見ることができると思います。オブジェクト指向の思考のコアの1つは、現実の世界と現実世界の抽象的なものをカテゴリにシミュレートすることです。プログラム全体は、さまざまなタイプのインスタンスに依存して互いに通信し、互いに協力してシステム機能を完了します。これは、現実世界の運用条件と非常に一致しており、オブジェクト指向の思考の本質でもあります。
2)インターフェイスは、特定の粒状ビューでの同様のものの抽象的な表現です。ここでは、「同じもの」の概念は相対的であり、粒状の見解が異なるために変化するため、特定の粒状の見解を強調していることに注意してください。
たとえば、私の目には、私は人であり、私と豚の間には根本的な違いがあります。私はクラスメートと私が同じであるという声明を受け入れることができますが、私は豚と同じであることを受け入れてはなりません。しかし、動物学者の目が豚のようなものである場合、私たちは両方とも動物であるため、「人間」と「豚」の両方がianimal界面を実装していると考えることができます。彼が動物の行動を研究するとき、彼は私と豚を別々に治療することはありませんが、「動物」のより大きな粒子サイズからそれを研究しますが、彼は私と木の間に本質的な違いがあると考えます。
私が遺伝学者に変わったので、状況は異なります。彼の目には、すべての生物が継承される可能性があるため、私は豚と違いはなく、蚊、細菌、木、キノコ、またはSARSウイルスさえも違います。彼は私たちを別々に勉強することはありませんが、すべての生物を似たようなタイプとして研究します。彼の目には、人間とウイルスの間に違いはなく、遺伝性物質と非溶解性物質のみがあります。しかし、少なくとも、私と石の間にはまだ違いがあります。
しかし、残念ながら、ある日、レーニンという名前の偉大な男が地球に現れました。彼がマックスとエンゲルスの弁証法的唯物論の傑作に精通した後、彼は多くの経験を持っていたので、彼は有名な定義を与えました:いわゆる物質は、意識に反映されることができる客観的な現実です。この時点で、私はもはや石、空気の痕跡、イディオム、携帯電話のシグナルを伝達する電磁界と違いはありません。レーニンの目には、意識に反映されることができる客観的な現実だからです。レーニンがプログラマーだった場合、彼はこれを言うでしょう:いわゆる物質は、2つのインターフェイス「ireflectabe」と「iesse」を実装するすべてのクラスによって生成されるインスタンスです。 (注:v。反映nesse n。客観的現実を反映してください)
上記の私の例はナンセンスだと思うかもしれませんが、これはまさにインターフェイスの意味です。オブジェクト指向のアイデアとコアの1つは多型です。多型とは何ですか?率直に言って、特定の粒状ビューレベルで同様のことを無差別に扱い、均一に処理することです。そして、私がこれをしようとする理由は、インターフェイスがあるからです。その遺伝学者のように、彼はすべての生物がアイデンスアンセンスのインターフェースを実装していることを理解していました。それらが生物である限り、descend()方法がなければならないので、彼は各生物を個別に研究し、最終的に疲労させることなく統一された方法でそれらを研究することができます。
たぶん、私たちはあなたにインターフェイスの性質と機能について直感的な印象を与えることができないでしょう。次に、次の例といくつかの設計パターンの分析で、インターフェイスの意味合いをより直感的に体験できます。
3。インターフェイス指向のプログラミングの概要
上記の記事を通して、インターフェイスとインターフェイスのイデオロギー的な意味合いを理解していると思います。では、インターフェイス指向のプログラミングとは何ですか?私の個人的な定義は、システム分析とアーキテクチャでは、階層と依存関係を区別します。各レベルは、上層層(つまり、上層に直接インスタンス化されるのではなく)に直接サービスを提供するのではなく、インターフェイスのセットを定義し、インターフェイス機能を上層層に公開するだけです。上層は下層にのみ依存し、特定のクラスに依存しません。
これを行うことの利点は明らかであり、まず第一に、システムの柔軟性にとって非常に有益です。インターフェイスとインターフェイス機能が変更されていない限り、下層を変更する必要がある場合、上層を変更する必要はありません。 WD 60GハードドライブをSeagate 160Gハードドライブに置き換えるのと同じように、上層コードを変更せずに下層を交換することもできます。コンピューターの他の部分で変更を加える必要はありませんが、コンピューターの他の部分は特定のハードドライブに依存せず、IDEインターフェイスにのみ依存するため、元のハードドライブを抜き、新しいハードドライブをプラグインするだけです。ハードドライブがこのインターフェイスを実装する限り、交換できます。ここから、プログラムのインターフェイスは実際にはインターフェイスに非常に似ているので、私は常に単語インターフェイスが本当に似ていると信じてきました!
インターフェイスを使用するもう1つの利点は、さまざまなコンポーネントまたはレベルの開発者が、CPUやモニターを作成する必要がないように、異なるコンポーネントまたはレベルの開発者が並行して構築を開始できることです。インターフェイスが一貫しており、設計が合理的である限り、開発は並行して実行することができ、それにより効率を向上させることができます。
この記事は最初にここに来ます。最後に、私は何か他のことを言いたいです。オブジェクト指向の本質は、現実をシミュレートすることです。これは私の記事の魂とも言えます。したがって、現実からオブジェクト指向のことについてもっと考えることは、システム分析と設計能力を改善するために大きな利益をもたらすでしょう。
次の記事では、例を使用して、インターフェイスプログラミングの基本的な方法を示します。
3番目の記事では、古典的なデザインパターンのインターフェイス指向のプログラミングアイデアを分析し、.NET階層アーキテクチャのインターフェイス指向のアイデアを分析します。
この記事の補足:
あなたの返信を慎重に読んだ後、私はあなたと技術的な問題について話し合うことができてとてもうれしいです。断言をした友人たち、そして意見や質問を提出した友人に感謝します。ここでは、応答により集中した問題のいくつかについて議論するために何かを追加したいと思います。
1。「インターフェイス指向プログラミング」の2つの単語「インターフェイス」と特定のオブジェクト指向言語「インターフェイス」について
「インターフェイス指向プログラミング」の「インターフェイス」という言葉は、単純なプログラミング言語のインターフェイスよりも範囲の範囲を持つべきだと示唆する友人を見ました。それについて考えた後、私はそれが理にかなっていると思いました。私がここで書いたものは確かに不合理です。オブジェクト指向言語の「インターフェイス」とは、インターフェイスキーワードを使用してC#で定義されているインターフェイスなど、特定のコード構造を指すと思います。 「インターフェイス指向のプログラミング」の「インターフェイス」は、ソフトウェアアーキテクチャの観点からより抽象的なレベルから、より抽象的なレベルを指す構造コンポーネントであると言えます。この意味で、抽象クラスが定義され、目的が多型を達成することである場合、この抽象クラスも「インターフェイス」と呼ぶことは合理的だと思います。しかし、抽象クラスを使用して多型を実装することは合理的ですか?以下の2番目の記事で説明します。
要約すると、2つの「インターフェイス」の概念は異なり、互いに関連していると思います。 「インターフェイス指向プログラミング」のインターフェイスは、ポリモーフィズムを実現し、ソフトウェアの柔軟性と保守性を向上させるためのイデオロギーレベルのアーキテクチャコンポーネントであり、特定の言語の「インターフェイス」は、このアイデアのコンポーネントをコードに実装する手段です。
2。抽象クラスとインターフェイスについて
私はこれが返信のより激しい問題であることを見ました。申し訳ありませんが、私はこの問題についてこの問題についてよく考えていませんでした。この問題についての私の個人的な理解は次のとおりです。
特定のコードのみを見ると、これらの2つの概念は簡単にぼやけています。また、特定の関数のみから、複数の継承(c#、java)を除き、抽象クラスはインターフェイスを完全に置き換えることができるように見えるため、インターフェイスは冗長であるとさえ考えています。しかし、複数の継承を達成するためのインターフェイスの存在はありますか?もちろん違います。抽象クラスとインターフェイスの違いは、使用する動機だと思います。抽象クラスの使用はコードの再利用であり、インターフェイスを使用する動機は多型です。したがって、どこかでインターフェイスを使用するか抽象クラスを使用するかをためらう場合は、自分の動機が何であるかを考えることができます。
Ipersonインターフェイスについて友人の疑問を見て、私の個人的な理解では、Ipersonインターフェイスを定義する必要があるかどうかは特定のアプリケーションに依存するということです。私たちのプロジェクトに女性と男性がいる場合、両方の継承者であり、女性と男性のほとんどの方法は同じであり、1つの方法しかありません。DosomeThingInwc()は異なります(例は下品です、私を許してください)。コード。
ただし、私たちのプログラムの女性と男性のクラスに基本的に共通のコードがなく、それらをインスタンス化する必要があるペンペルペンハンドルクラスがあり、男性か女性かを知りたくないが、それらを人間として扱い、多型を実装するだけで、インターフェイスとして定義する必要があります。
要するに、インターフェイスと抽象クラスの違いは、主にそれ自体ではなく使用の動機によるものです。物を抽象クラスまたはインターフェイスとして定義する必要がある場合、特定の環境のコンテキストに基づいて決定する必要があります。
さらに、インターフェイスと抽象クラスのもう1つの違いは、抽象クラスとそのサブクラスの間に一般的かつ特別な関係があるはずであると思いますが、インターフェイスはサブクラスが実装すべきルールのセットにすぎません。 (もちろん、一般的かつ特別な関係があるかもしれませんが、インターフェイスの使用の目的はここにありません。)たとえば、車両、航空機、船をサブクラスとして定義することは許容されます。たとえば、icomparableインターフェイスには、このインターフェイスを実装するクラスを比較できる必要があると述べています。これはルールです。車のクラスがicomparableを実装する場合、それは私たちの車に2つの車のインスタンスを比較する方法があることを意味します。それは問題ではありませんが、「車は特別で、比較できる」とは言えません。これは文法的に適用できません。
この記事がみんなのJavaプログラミングに役立つことを願っています。