抽象クラスとインタフェースの深い理解

はじめに:

オブジェクト指向プログラミングは、抽象的には、その主要な特徴の一つです。抽象クラスとインタフェース:Javaでは、抽象OOPは、2つの形態で具現化することができます。どちらも、あまりにも多くの類似点を持って、あまりにも多くの異なる場所があります。多くの人々は、彼らが交換可能に使用されて自由にあるときに初心者だと思うが、実際にはないだろう。今日はJavaインターフェースと抽象クラスでの学習を見てみましょう。

 

まず、抽象クラス

抽象クラス、抽象メソッドの最初の外観を理解する前に。抽象メソッドは、特殊な方法である:それは唯一の文ではなく、実装です。次のように文形式抽象メソッドは次のとおりです。

抽象のボイド楽しいです();

 

抽象メソッドは抽象キーワードで変更する必要があります。クラスは抽象メソッドが含まれている場合、クラスは抽象クラスと呼ばれる、抽象クラスは、抽象キーワードでクラスの前に変更する必要があります。抽象クラスの具体的な方法が実装されていない含まれているため、そのオブジェクトの抽象クラスを作成することはできません。

以下の質問に注意を払う必要があります:「Javaプログラミングのアイデア、」本クラスは抽象メソッドが含まれていない場合は、「クラスの抽象メソッドを含む」が、後に見つけましたが、抽象的な言葉で修飾して定義された抽象クラスは抽象クラスです。これは抽象クラスは、抽象メソッドを含む必要がないです。抽象クラスは、すべての抽象メソッドが含まれていない場合は、なぜデザインは抽象クラスであるため、個人的に私は、行き止まりに問題の一部を感じますか?だから、私たちは理由に入る必要はありません、この概念を覚えてみましょう。

[パブリック]抽象クラスClassName {
   抽象のボイド楽しいです();
}

ここからわかるように、それはあなたが何のためにそれを使用することはできませんので、この抽象クラスを作成するために無駄に等しい、その後、抽象クラスを定義し、それを継承していない場合は、抽象クラスが、存在継承することです。それは親クラスでそれを達成するための方法は意味がないです場合は、親のために、異なるサブクラスの実際のニーズに合わせて実施されなければならない、このメソッドはクラスでは、この時点でも、抽象メソッドとして宣言することができますこれは、抽象クラスとなっています。

これは、クラスの抽象メソッドが抽象クラスと呼ばれて含まれているが、それは、それはまた、通常のメンバ変数とメンバメソッドを持つことができるよう抽象クラスは、抽象メソッド、および一般的なカテゴリを持つことができるという意味ではありません。抽象クラスと一般クラス間の三点差があることに注意してください:

    • 1)抽象メソッドは、パブリックまたは既定のパブリックで、デフォルト(それがプライベートであれば、それはサブクラスに継承されていないため、サブクラスはこのメソッドを実装することはできません)保護されなければなりません。

    • 2)抽象クラスは、オブジェクトを作成するために使用することはできません。

    • クラスは抽象クラスから継承する場合3)、抽象親クラスのサブクラスを実装する必要があります。サブクラスは抽象親クラスのメソッドを実現していない場合、それはまた、抽象クラスのサブクラスとして定義する必要があります。

    • その他の点では、抽象クラスと通常のクラスと違いはありません。

第二に、インタフェース

英語のインターフェース、ソフトウェア・エンジニアリング、として知られているインタフェースは、呼び出すために他の人のためのインタフェースのメソッドや関数を指します。ここから、私たちはJava言語の設計者の目標を理解することができる、それが抽象的行動です。Java(登録商標)、次のインタフェースの指定された形式で:

[ パブリック]  インターフェイス  インターフェイス名{

}

インタフェースは、変数やメソッドが含まれていてもよいです。しかし、インタフェース変数は暗黙的のpublic static final変数として指定されている(そして唯一のpublic static final変数、コンパイラはプライベート修正してエラーを報告します)、注意、および方法は、暗黙的にパブリック抽象メソッドとして指定されますそして唯一の公共抽象メソッド(例えば、民間の保護、静的、最終的およびその他の変更などの追加のキーワードでコンパイルエラーを報告します)、およびインタフェース・メソッドは、すべての特定の実装を持っていない、それは、インターフェイスメソッドである必要があります彼らは抽象的です。私たちは漠然と抽象クラスとインタフェースの違いを見ることができるここから、インターフェイスタイプは、それが抽象クラスよりも「抽象的」である、非常に抽象的であり、変数は通常の状況下で、インターフェイスで定義されていません。

クラスは、具体的implementsキーワードは、次の形式を使用する必要がインターフェースの特定のセットに従ってみましょう:

クラス  クラス名は、  実装  インターフェース1を、インターフェイス2、[...] {
}

図から分かるように、複数のクラスが特定のインターフェースに従うことを可能にします。非抽象クラスがインタフェースに従った場合、すべてのメソッドのインターフェイスを実装する必要があります。抽象インターフェースクラスに従うために、インタフェースの抽象メソッドを達成することができません。

抽象クラスとインタフェースとの間の差

1、文法レベルとの差

  • 1)抽象クラスが存在することができる方法パブリック抽象インターフェースおよび方法の実装の詳細を提供することができます。

  • メンバ変数2)抽象クラスは、様々なタイプであってもよいが、インタフェースのメンバ変数のみのpublic static final型とすることができます。

  • 3)インターフェースは、静的抽象クラスは、静的メソッドとコードブロックを有することができ、静的ブロックおよび静的メソッドを含めることはできません。

  • 4)クラスは、抽象クラスを継承することができるが、このクラスは、複数のインターフェイスを実装することができます。

2、設計レベルの差

1)抽象クラスは抽象クラスであること、の抽象化であり、インターフェースは抽象的行動です。抽象クラスは、属性、行動を含む全体の全体のための抽象クラスですが、インターフェースは、部分的(行動)抽象的に基づいています。ここでは簡単な例、航空機と鳥は、物事のさまざまな種類がありますが、それらはすべて一つの共通点を持っている、つまり、飛ぶです。だから、設計では、航空機は、クラスの鳥として設計された鳥は、クラスの飛行機として設計することができますが、あなたがすることはできません飛ぶそれだけで特徴的な挙動ではなく、物事のクラスの抽象的な記述ですので、この機能はまた、クラスとして設計されています。この時点で、あなたが飛ぶように設計されたインターフェースを飛ぶことができる、それが(メソッドが飛ぶ含まれています)、その後、飛行機フライ鳥は自分のニーズに応じて、それぞれ、このインターフェイスを実装します。そこ航空機のさまざまな種類があり、その後、戦闘機、民間航空機などは直接飛行機を継承できるように、鳥は鳥の異なる種についても同様である直接鳥のクラスを継承することができます。ここからわかるように、連続しているインタフェースが関係「何もない」されている間、関係「ではありません」。クラスは抽象クラスを継承する場合、サブクラスは抽象クラスとインターフェースの種類は関係がありませんと鳥が飛ぶことができるかのように、そこ(フライトや、彼らがこの機能を持っているかどうか)などで、飛ぶことができなければなりませんあなたはこのインタフェースを実装することができ、それはこのインタフェースを実装していない飛ぶことができません。

2異なる)設計レベル、親クラスの抽象クラスなど、多くのサブクラスは、テンプレートデザインです。インターフェイスは晴れやかなデザインで、行動規範です。テンプレートデザインとは何ですか?PPTのBとPPTのCを設計した場合、最も単純な例では、我々は、PPTテンプレート内で使用しているテンプレート、PPTのBとのppt C彼らは変更する公共の必要性の一部である場合の部分は、あなただけ変更する必要がありますされ、共通のテンプレートテンプレートは、変更を行うためにBとPPTのC-PPTの再する必要はありませんすることができます。アラームが更新されるように一度、このようなエレベーターのような放射線のデザインは、それがすべて更新する必要があり、アラームのいくつかの種類がインストールされています。それはあなたが抽象クラスの具体的な実現に直接添加することができる新しいメソッドを追加するには、サブクラスを変更することはできません必要な場合は、抽象クラスのためであり、インタフェースが変更された場合のインターフェースのために、このインタフェースのすべての実現ではありませんクラスは、適切な変更を加える必要があります。

例として、ドアアラーム:最も広くインターネット上で流通の以下の例を見てドアがある(オープン)(クローズ) 2つのアクション、そして私たちは、抽象クラスとインタフェースを通じてこの抽象概念を定義するために定義することができます。

抽象  クラスの  ドア{ パブリック  抽象  無効  オープン(); パブリック  抽象  ボイド  近いです(); }
   
   

または:

インタフェース  ドア{ パブリック  抽象  ボイド  オープン(); パブリック  抽象  ボイド  近いです(); }
   
   

しかし、今、我々が達成するためにどのようにして、ドアのアラーム機能を持っている必要がありますか?私たちは、次の2つのアイデアを提供します:

1)これらの3つの機能は、抽象クラスの内側に配置されているが、すべての抽象クラスのサブクラスから継承されたこの方法は、アラーム機能が装備されているが、一部のドアは必ずアラーム機能を持っていません。

2)これらの3つの機能がインターフェイスの内側に配置されている、あなたはオープン()と)(近いこのインタフェースを実装する必要があるクラスのアラーム機能を使用する必要があり、おそらくこのクラスは、単に)(オープン()とcloseこのを持っていませんこうした火災警報器などの2つの機能、。

ここに見られるように、ドアオープン())(、クローズ、およびアラーム()は、単純に(オープン()、およびクローズ、2つの異なる領域内の一部機能)門の本来の行動特性に属し、アラーム()が属します追加の動作を拡張します。したがって、最善の解決策は、(アラームを含む別個のアラームインターフェイスを設計することである)開閉2つの動作を含む、抽象クラス別ドアとして、作用します。再設計のドアアラームドアアラームクラスを継承し、インターフェイスを実装。

インタフェース  Alram { ボイド  アラーム(); } 抽象  クラス  ドア{ ボイド  オープン(); 空  に近いです(); } クラス  AlarmDoorは  延び  ドア  実装  アラーム{ ボイド  oepn(){ // ...   } ボイド  近い(){ // ...   } ボイド  アラーム(){ // ...   } }
   


   
   


   
     

   
     

   
     

オリジナル:www.cnblogs.com/dolphin0520/p/3811437.html

おすすめ

転載: www.cnblogs.com/zhengjinsheng/p/11199700.html