最初に基本的な概念を教えてください
Java言語では、抽象クラスとインターフェイスは、抽象クラスの定義をサポートする2つのメカニズムです。 Javaに強力なオブジェクト指向の能力が与えられることは、まさにこれら2つのメカニズムの存在のためです。抽象クラスとインターフェイスは、抽象クラスの定義をサポートする上で大きな類似性を持ち、互いに置き換えることさえできます。したがって、多くの開発者は、抽象クラスを定義する際に、抽象クラスとインターフェイスの任意の選択肢を持っているようです。実際、この2つにはまだ大きな違いがあります。それらの選択は、問題領域の本質の理解と設計意図の理解が正しく合理的であるかどうかさえ反映しています。
抽象クラスとインターフェイスは両方ともJava言語で抽象クラスを実行するために使用されます(この記事の抽象クラスは抽象クラスから翻訳されていません。抽象的なボディを表し、抽象クラスは抽象クラスを定義するためにJava言語で使用される方法です。区別に注意してください)。では、抽象クラスとは何ですか?抽象クラスを使用できる利点は何ですか?
オブジェクト指向の概念では、すべてのオブジェクトがクラスで描かれていることがわかっていますが、逆はそうではありません。すべてのクラスがオブジェクトを記述するために使用されるわけではありません(クラスの具体化)。クラスに具体的なオブジェクトを説明するのに十分な情報が含まれていない場合、そのようなクラスは抽象クラスです。抽象クラスは、問題領域の分析と設計で得られる抽象的な概念を表すためにしばしば使用され、異なると思われるが本質的に同じ一連の具体的な概念の抽象化です。たとえば、グラフィック編集ソフトウェアを開発すると、問題フィールドにサークルや三角形などの特定の概念があることがわかります。それらは異なりますが、それらはすべて形の概念に属します。形状の概念は、問題の分野には存在しません。それは抽象的な概念です。抽象的な概念には、抽象的な概念を表すために使用される抽象クラスをインスタンス化できないという抽象概念が問題領域に対応する具体的な概念がないためです。
仮想関数とインターフェイスは、Java開発でよく使用されます。これら2つの違いは何ですか?
要約:サブクラスで継承できる親クラスのみが1つだけ
インターフェイス:サブクラスは複数のインターフェイスを実装できます
では、いつ抽象を使用し、いつインターフェイスを使用するのですか?
サブクラスと親クラスが関係にある場合、たとえばアジア人が人である場合、アジアのサブクラスは人の親クラスを継承することができます。
サブクラスと親クラスが関係のような場合、たとえば、アメリカのスーパーマンはスーパーマンのようなものです。スーパーマンの能力はすべての人ではないため、すべてが属性ではありません。超大国を人間の親クラスに帰することはできません。現時点では、インターフェイスを使用できます
コード例:
パブリックアブストラクトクラスマン{パブリックアブストラクトボイドイート();}パブリックインターフェースsuperpower {public void superpower();}パブリッククラスアシアマンは{@overridepublic void eat(){system.out.println( "asians eat with thouch sticks");} {System.out.println( "American Superman Can Can Fly");}@OverridePublic void Eat(){System.out.println( "アメリカ人Eats with Knife and fork");}} public static void main(string [] args){man anasiaman = new asiaman( Americansuperman(); anasiaman.eat(); anamericansuperman.eat(); Anamericansuperman.superpower();}実行結果:
アメリカ人はナイフと一緒に食べるとフォークアメリカ人のスーパーマンは箸で食べるアジア人を飛ばすことができます
抽象とインターフェイスの正しい使用は、コードの読みやすさを改善するために有益です。人々が拡張を見ると、彼らは何であるかを知るでしょう。実装を見ると、このクラスがどのような機能を持っているかを知ることができます。