Javaにおけるインタフェースと抽象クラスの違い

主な違い:インタフェースまたはプロトコルは、無関係なオブジェクトが互いに通信できるようにする一般的な方法です。 これは、2つのオブジェクト間の対話を容易にする合意された動作を表します。 抽象クラスは、インスタンス化することもオブジェクトのインスタンスを設定することもできないオブジェクトのクラスです。 このクラスには実装がないか、不完全な実装になる可能性があります。

Java、C ++、C#はすべて複雑なプログラミング言語であり、これらを使用するには詳細な調査と理解が必要です。 これらの言語では、言語の機能を決定するためにさまざまな方法が使用されています。 インターフェイスと抽象クラスは、OOP(オブジェクト指向プログラミング)の一部である2つの混乱しやすい概念です。 これら2つは個別に使用することも、互いに一緒に使用することもできます。 これら2つは互いに完全に異なり、異なる場合に使用されます。

Javaはプログラミング言語であり、C言語の影響を受けています。 その構文の多くはCとC ++から派生していますが、どちらよりも低レベルの機能は少ないです。 Javaは、以前の言語に比べて実装の依存関係が少なくなるように設計されている汎用プログラミング言語です。 それは、並行、クラスベース、そしてオブジェクト指向言語です。

JavaはSun MicrosystemsのJames Goslingによって開発され、1995年にリリースされました。もともとはSun MicrosystemsのJavaプラットフォームのコアコンポーネントとしてリリースされました。 Sunはその後、GNU General Public Licenseの下で、そのJavaテクノロジのほとんどを再ライセンスしています。 これは、GNU General Public Licenseの下でライセンスされているすべての技術がオープンソースであり、一般に無料で利用できることを意味します。 Sun Microsystemsは最終的にOracle Corporationに合併しました。 2012年の時点で、Javaは最も普及しているプログラミング言語の1つになりました。 これは、クライアントサーバーWebアプリケーションに特に当てはまります。 他の多くのシステムは、Java用のGNUコンパイラやGNU Classpathなど、Sunのテクノロジの代替実装を開発しました。

インターフェースまたはプロトコルは、無関係のオブジェクトが互いに通信できるようにする一般的な方法です。 これは、2つのオブジェクト間の対話を容易にする合意された動作を表します。 インターフェースは、実装されているさまざまなアクションへの鍵を保持し、2つの異なるオブジェクト間のリンクとして機能します。 オブジェクトのクラスがインタフェースに公開されている場合、そのクラスはインタフェースによって実装されている動作に従う必要があります。 一般に、インタフェースは定数宣言とメソッドシグネチャのみを含みます。 特定のインタフェースを実装するインタフェースは、そのインタフェースに記載されているすべてのメソッドを適用するか、抽象クラスとして宣言する必要があります。 Javaでは、そのオブジェクトがnullであるか、またはその特定のインタフェースを実装するクラスを保持している場合、任意のオブジェクトをインタフェースとして定義できます。 実装キーワードを使用して、Javaの単一クラスに複数のインタフェースを実装できます。

抽象クラスは、インスタンス化することもオブジェクトのインスタンスを設定することもできないオブジェクトのクラスです。 このクラスには実装がないか、不完全な実装になる可能性があります。 また、すべてのサブクラスで共有される抽象メソッドまたはプロパティを持つこともできます。 プログラミング言語によっては、実装のない抽象型はインタフェースと呼ばれます。 Javaでは、クラス定義内のキーワード 'abstract'を使用して抽象型を作成できます。 抽象クラスに実装されていないすべてのメソッドを抽象クラスに入れ、それらをサブクラスに任せてこれらのクラスの実装方法を決定する目的。 クラスが単一の抽象メソッドを持つ場合、そのクラスは抽象クラスとして宣言する必要がありますが、クラス抽象を宣言するために少なくとも1つの単一メソッドを持つ必要はありません。

Malliktalksjava.inには、インターフェースと要約の主な違いがリストされています。

  • 抽象クラスにはコンストラクタがありますが、インタフェースにはありません。
  • 抽象クラスは、そのメンバのいくつか(メソッド)の実装を持つことができますが、インタフェースはそのメンバのいずれかの実装を持つことはできません。
  • 抽象クラスは他には役に立たないサブクラスを持つべきです。
  • インターフェースは他のクラスによる実装を持たなければなりません。
  • あるインタフェースだけが別のインタフェースを拡張できますが、どのクラスも抽象クラスを拡張できます。
  • インターフェース内のすべての変数はデフォルトではfinalです。
  • インタフェースは、ある形式の多重継承を提供します。 クラスは他のクラスを1つだけ拡張できます。
  • インタフェースは、実装されていないパブリックメソッドと定数に制限されています。 抽象クラスは、部分的な実装、保護された部分、静的メソッドなどを持つことができます。
  • クラスはいくつかのインタフェースを実装できます。 しかし抽象クラスの場合、クラスは1つの抽象クラスのみを拡張できます。
  • 実際のクラスで対応するメソッドを見つけるために追加の間接参照が必要になるため、インタフェースは遅くなります。 抽象クラスは速いです。
  • アクセシビリティ修飾子(Public / Private / internal)は抽象クラスに使用できます。 インターフェースはアクセシビリティ修飾子を許可しません
  • 抽象クラスは完全なまたは不完全なメソッドを含むことができます。 インターフェースは、メソッドのシグニチャーのみを含み、本体を含むことはできません。 したがって、抽象クラスはメソッドを実装できますが、インターフェイスはメソッドを実装できません。
  • 抽象クラスは、フィールド、コンストラクタ、またはデストラクタを含み、プロパティを実装できます。 インターフェイスはフィールド、コンストラクタ、またはデストラクタを含むことはできず、プロパティのシグネチャのみを持ち、実装は持ちません。
  • abstract、protected、internal、public、virtualなどのさまざまなアクセス修飾子は、抽象クラスでは役立ちますが、インタフェースでは役立ちません。
  • 抽象スコープは派生クラス次第です。
  • インタフェーススコープは、その継承チェーンのどのレベルにも及ぶ。

この表の情報は、codeproject.comおよびmindprod.comの提供によるものです。

インタフェース

抽象クラス

多重継承

クラスはいくつかのインタフェースを継承できます。

クラスは1つの抽象クラスのみを継承できます。

デフォルト実装

インターフェースはコードを提供することはできず、シグニチャだけを提供します。

抽象クラスは、完全なデフォルトコードおよび/またはオーバーライドする必要がある詳細のみを提供できます。

アクセス修飾子

インタフェースは、subs、関数、プロパティなどのアクセス修飾子を持つことはできません。すべてがパブリックと見なされます。

抽象クラスには、subs、関数、プロパティに対するアクセス修飾子を含めることができます。

コアとペリフェラル

インターフェースはクラスの周辺機能を定義するために使用されます。 言い換えれば、HumanとVehicleの両方がIMovableインターフェースから継承できます。

抽象クラスはクラスのコアアイデンティティを定義し、そこでは同じ型のオブジェクトに使用されます。

均一性

さまざまな実装がメソッドシグネチャを共有するだけの場合は、インターフェイスを使用することをお勧めします。

さまざまな実装が同じ種類のものであり、共通の動作またはステータスを使用している場合は、抽象クラスを使用する方が適切です。

速度

対応するクラスで実際のメソッドを見つけるのにより多くの時間が必要です。

速い

機能を追加する

インターフェースに新しいメソッドを追加すると、インターフェースのすべての実装を追跡し、新しいメソッドの実装を定義する必要があります。

抽象クラスに新しいメソッドを追加すると、デフォルトの実装を提供するオプションがあるため、既存のすべてのコードが正しく機能する可能性があります。

フィールドと定数

インターフェースにはフィールドを定義できません。

抽象クラスはフィールドと定数を定義できます。

簡潔さ

インターフェース内の定数宣言はすべてpublic static finalと見なされます。

共有コードは抽象クラスに追加できます。

定数

静的最終定数のみが、インターフェースを実装するクラスで修飾なしにそれらを使用できます。

インスタンス定数と静的定数の両方が可能です。 静的初期化コードとインスタンス初期化コードの両方で、定数を計算することもできます。

第三者による利便性

インタフェースの実装は、既存のサードパーティクラスに追加できます。

サードパーティのクラスは抽象クラスからのみ拡張するように書き直す必要があります。

is-a対-ableまたはcan-do

インターフェースは、クラスの中心的なアイデンティティではなく、クラスの周辺機能を記述するためによく使用されます。例えば、Automobileクラスはリサイクル可能なインターフェースを実装することができます。

抽象クラスは、その子孫の中心的なアイデンティティーを定義します。 実装されたインタフェースは、クラスができることではなく、クラスが実行できる一般的なことを列挙します。

Javaのコンテキストでは、ユーザーは通常、Threadを拡張するのではなくRunnableインターフェースを実装する必要があります。新しいThread機能を提供することにはあまり関心がないため、通常はコードに独立して実行する機能を持たせるだけです。 彼らは、新しい種類のスレッドではなく、スレッドで実行できるものを作成したいと考えています。 継承するか委任するかを決めるときに、似たような議論があります。

プラグイン

ユーザーは、既存の実装と共通のコードを1つも含まないインターフェース用の新しい置換モジュールを作成できます。 ユーザがインタフェースを実装するとき、それらはデフォルト実装なしで最初から始めます。 ユーザーは他のクラスからツールを入手する必要があります。 インタフェースには、いくつかの定数以外は何も付属していません。 これにより、ユーザーは根本的に異なる内部デザインを自由に実装できます。

ユーザーは、コードクラスに抽象クラスをそのまま使用し、それに付随するすべての手荷物を使用する必要があります。 抽象クラスの作者がユーザーに構造を課しました。

メンテナンス

クライアントコードがインタフェースに関してのみ話している場合は、ファクトリメソッドを使用してその背後にある具体的な実装を簡単に変更できます。

クライアントコードが抽象クラスに関してのみ話している場合は、ファクトリメソッドを使用してその背後にある具体的な実装を簡単に変更できます。

推奨されます

関連記事

  • との差: WebサーフィンとWebブラウジングの違い

    WebサーフィンとWebブラウジングの違い

    主な違い :2つの用語の主な違いは、「Webブラウジング」という用語は特定のWebサイトで特定の情報を検索または検索することを意味し、「Webサーフィン」とは異なるテーマで目的を超えて情報を検索することを意味します。ウェブサイト ただクリックするだけで任意の主題に関する情報で、人々の生活の中でインターネットの使用はかなり成長しています。 ほとんどの場合、人々はコンピュータの前に座っているのが大好きで、インターネット上のさまざまなWebサイトを長時間無意味に見て行きます。 そして多くの場合、さまざまなサイトのページを単にクリックするというこの習慣は、「Webサーフィン」および「Webブラウジング」と呼ばれます。 「サーフィン」と「ブラウジング」という用語は通常、インターネット上またはインターネットを介した「検索」というタスクを指すのに使用され、しばしば同じものと見なされます。 現在、2つの用語の技術的な違いは特定のタスクに依存しています。1つはWebを閲覧するか、もう1つはWebを閲覧するだけのことです。 ある人が特定のブラウザを使って特定のものを探すためにウェブサイトを閲覧することを「ブラウジング」と呼び、同じ人が単にランダムに検索したり別のウェブサイトを閲覧する場合は「サーフィン」と呼びます。 。 一般的には、「Webブラウジング」と「Webサーフィン」という用語に違いはありません
  • との差: アルカテルワンタッチアイドルウルトラとサムスンギャラクシーS3の違い

    アルカテルワンタッチアイドルウルトラとサムスンギャラクシーS3の違い

    主な違い: アルカテルワンタッチアイドルウルトラは、720 x 1280ピクセルの解像度で4.65インチHD AMOLED静電容量式タッチスクリーンを備えています。 この電話機は、MediaTek MTK 6577上のデュアルコア1.2 GHzプロセッサと1 GBのRAMを搭載しています。 携帯電話の幅は6.45mmで、市場で最も薄いスマートフォンとして宣伝されています。 ギャラクシーS3は、2012年5月に発売されたスレートフォーマットのマルチタッチスマートフォンです。 S3は、1.4 GHzのCortex-A9クアッドコアプロセッサ、Mali-400MP GPU、および1 GBのRAMをサポートしています。 アルカテル - ルーセントは、フランスのパリに拠点を置く世界規模の電気通
  • との差: 修正茎と修正根の違い

    修正茎と修正根の違い

    主な違い :植物の茎と根の両方は、通常の機能以外の特定の機能を実行するために異なる形式に変更されます。 一般に、植物の根と茎は環境に適応するためにその構造を変えます。 今、地上または地下に生長する植物の多様な部分に基づいて、茎と根を区別することができます。 植物は、葉、茎、根、花などで構成されています。これらのうち、人間が消費するのは食用植物の茎です。 けれども、これは私達人間によってあまりにも消費されている根、葉、果物そして種子を含みます。 そして、需要が増えるにつれて、生産も増えるでしょう。 生産におけるこの成長は彼らの助手、修飾された茎および修飾された根を通して植物によってもたらされます。 植物のあらゆる肢は、それらの陸生生物に関連する特定の環境要件の文脈で成長しました。 ここでは、根が植物を固定し、水や他のミネラル栄養素を吸収します。 葉は光合成を最適化します。 茎は葉を持ち上げ、新しい成長を生み出し、根から葉への導管として機能します。 しかしながら、植物のそれぞれの系統はそれ自身の独特の進化の経路をたどり、そして時が経つにつれて、植物の茎、根、葉は異常で驚くべき方法で変更されてきた。 「茎」とは、植物がその葉を太陽の下に広げる機会を与えるために成長する頑丈な構造です。 茎の成長は植物の高さを増し、それを葉で覆うことによってその面積を広げ、さらに暗い場所から明るい場所へと植物
  • との差: 労働と労働の違い

    労働と労働の違い

    主な違い: 単語のスペルは、どこで誰によって書かれたかによって異なります。 イギリス英語(より一般的)はスペル「労働」を使用しますが、アメリカ英語はスペル「労働」を使用しませんでした。 両方の単語はまったく同じことを意味します。 労働と労働という言葉は、第二言語として英語を学んでいる多くの人々にとってしばしば混乱を招きます。 この混乱の理由は、他の人が労働を使用している間、労働という言葉を使用している多くのテキストに由来しています。 どちらのスペルも間違っていません。どちらも適切に使用されています。 文の意味を変えることなく、それらを簡単に交換することもできます。 単語の綴り方は、テキストが書かれた場所と人によって異なります。 イギリス英語(より一般的)はスペル「労働」を使用しますが、アメリカ英語はスペル「労働」を使用しませんでした。 両方の単語はまったく同じことを意味します。 「労働」という用語は、動詞だけでなく名詞としても定義されています。 どちらにも使用できます。 Merriam Websterはこの用語を次のように定義しています。 労働/労働(名詞): 特に困難な場合や強制的な場合は、肉体的または精神的な努力の支出 経済の中で商品やサービスを提供する人間の活動 起業家が利益のために提供したものとは区別された、賃金のために労働者によって行われたサービス 出産に関わる身体活動(子
  • との差: シラバスとカリキュラムの違い

    シラバスとカリキュラムの違い

    主な違い: 基本的に、シラバスは教育または訓練コースでカバーされることになっているトピックの記述的なアウトラインと要約です。 シラバスは通常、当該トレーニングコースについての具体的な情報を提供し、しばしば統治機関またはコースの講師によって起草されます。 カリキュラムは、学校や大学で提供される一連のコースとその内容です。 一般的なカリキュラムは、最も広い意味で、特定の学校で提供されるすべてのコースを列挙することがあります。 カリキュラムは規範的です。つまり、統治機関によって発行され、コース終了時に学生が理解しなければならないトピック、および特定の学年または標準を達成するためのレベルをリストします。 基本的に、シラバスは、教育または訓練コースで扱われることになっているトピックの記述的概要および要約です。 シラバスは通常、当該トレーニングコースについての具体的な情報を提供し、しばしば統治機関またはコースの講師によって起草されます。 一方、シラバスはシラバスの複数形です。 Dictionary.comによると、シラバスは次のとおりです。 談話の要点、講義科目の主題、カリキュラムの内容などの概要またはその他の簡単な説明 報告された事件の冒頭に現れる裁判所の判決の法的根拠の短い要約。 合法的な分野における主要な訴訟の要約を含む本。特に学生によって使用されます。 典型的なシラバスには、講師や指導助
  • との差: 立法と規制の違い

    立法と規制の違い

    主な違い: 立法は法定法を意味する別の用語です。 これらの法律は、国の議会または統治機関によって制定されています。 立法は法律を制定する過程も意味します。 規制は2つのことを定義するために使用することができます。 法律の監視と執行のプロセス、および法律が定められた規則を含む文書 法律と規制は、法律用語に精通していない人々をしばしば混乱させる2つの用語です。 法律は最も複雑な主題の1つであり、さまざまな文脈でさまざまなことを意味するさまざまな用語や単語があります。 この二つの言葉はそれらの言葉の一種です。 立法とは、立法府によって制定されている法律、または制定中の法律を指します。一方、規制とは、法律および規則の詳細を含む文書を監視および執行するプロセスです。 これら2つは互いにまったく異なるので混同しないでください。 立法は法定法を意味する別の用語です。 これらの法律は、国の議会または統治機関によって制定されています。 立法は法律を制定する過程も意味します。 まず、法律がどのように作られているのかを理解しましょう。 法律はアイデアであることから始まります。 アイデアはそれから請求書として知られている一枚の紙に置かれます。 この法案はその後立法府に行き、そこで法案を承認するか却下するかのどちらかに投票します。 法案が承認されると、次に法務部門に進み、法務部門は法案の詳細と実施プロセスを書
  • との差: 専用グラフィックカードと内蔵グラフィックカードの違い

    専用グラフィックカードと内蔵グラフィックカードの違い

    主な違い: 専用および内蔵グラフィックスカードは、2種類のグラフィックスカードです。 2つの主な違いは、内蔵グラフィックスカードがコンピューターに組み込まれていることです。 一方、専用グラフィックスカードはマザーボードに接続する必要がある外部接続です。 グラフィックス処理装置(GPU)とも呼ばれるグラフィックスカードは、システムまたはコンピュータが一連の画像またはグラフィックスを作成できるようにするカードです。 それは、それがワープロであろうと集中的なゲームであろうと、コンピューター上で実行されるありとあらゆるタスクに基本的に必要です。 コンピュータには多くのコンポーネントがあり、そのうちの1つがグラフィックカードです。 コンピュータがそれほど複雑ではなかったかのように、利用可能なGPUには2つの異なるタイプがあります。DedicatedGraphics CardとIntegrated Graphics Cardです。 2つの主な違いは、内蔵グラフィックスカードがコンピューターに組み込まれていることです。 それはマザーボードやコンピュータのCPUに統合されている内部付属品です。 一方、専用グラフィックスカードはマザーボードに接続する必要がある外部接続です。 専用グラフィックスカードの利点は、コンピュータのグラフィック性能を管理することだけを目的とした専用機器であることです。 特殊な機
  • との差: 胸焼けと消化不良の違い

    胸焼けと消化不良の違い

    主な違い: 胸やけは、人が胸や胸骨のすぐ後ろで灼熱感や痛みを経験する状態です。 この灼熱感は酸逆流によって、または消化性の酸が食道に流れ込むときに起こります。 消化不良は科学的に消化不良として知られています、人が不快感を感じるか、または食後に満腹感を感じる状態。 消化不良は胃酸が粘液と接触して胃を裏打ちして酸から保護することで起こります。 胃酸はライニングを分解し、胃酸を刺激して胃を炎症させます。 胸焼けと消化不良は、本質的に非常によく似た2つの条件であり、多くの人が区別するのを混乱させることがよくあります。 胸やけは実際には消化不良の副作用の一つです。 胸やけは、食道に入る胃酸によって引き起こされる胃の灼熱感や痛みがあるときです。 消化不良は、胃の粘膜内層が崩壊し、酸が内層を刺激する原因となります。 胸やけは、人が胸や胸骨のすぐ後ろで灼熱感や痛みを経験する状態です。 この灼熱感は酸逆流によって、または消化性の酸が食道に流れ込むときに起こります。 酸は食道の裏地を刺激し、人に刺激と不安を引き起こします。 胸やけは、発熱、心臓痛、または酸消化不良としても知られています。 人が食べ物を食べるとき、胃は食べ物が胃に入ると思われるときに開く一方向弁に似ています。 この弁は胃酸が上向きに流れて他の臓器を刺激するのを防ぎます。 しかし、特定の食べ物、薬、ニコチン、または食事や過剰な体重の後にあま
  • との差: NPDとHPDの違い

    NPDとHPDの違い

    主な違い: 自己愛性人格障害(NPD)は、人々が不安定で集中的な感情を示す医学的障害です。 患者は他の人と比較して膨らんだ自尊心と優越感を経験する。 Histrionic Personality Disorder(HPD)は、人々がより精神的に弱く、同僚からの継続的な承認を必要とする精神障害です。 彼らはまた、不適切に魅惑的、劇的、軽薄、誇張、巧妙な行動、そして自己耽溺の行動にも関連しています。 自己愛性人格障害(NPD)とHistrionic Personality Disorder(HPD)は、通常のストレスフリーの生活を送る能力に影響を及ぼす可能性がある2つの異なる病状です。 これら2つの症状は、よく似た症状がいくつかあるため混同されがちです。 NPDを患っている人は常に自分自身の幸福を心配しており、自分自身が他の人より優秀で非常に重要であると考えています。 HPDを患っている人は常に注意を払う必要があり、常に注意の中心になろうとしています。 これらは2つの異なる病状であり、そのように考慮されるべきです。 自己愛性人格障害(NPD)は、人々が不安定で集中的な感情を示す医学的障害です。 患者は他の人と比較して膨らんだ自尊心と優越感を経験する。 Web MDは、この疾患を「自己愛の異常愛、誇張された優位性と重要性、および成功と権力の先入観によってさらに特徴付けられる」と定義していま

エディターズチョイス

スパイスステラピナクルプロとサムスンギャラクシーグランドの違い

主な違い: スパイスステラピナクルプロMi - 535は、1.2 GHzの速度を持つミッドレンジバジェットクアッドコア電話です。 これはAndroid 4.2 Jelly Beanを実行し、1 GBのRAMを搭載しています。 携帯電話は、オートフォーカスとLEDフラッシュ付きの8 MPカメラを備えています。 携帯電話はまた、オートフォーカス付き、5 MPの正面広角二次カメラを備えています。 サムスンギャラクシーグランドはサムスンコーポレーションによって発売されているミッドレンジのスマートフォンです。 携帯電話は480×800ピクセルのディスプレイと5インチの容量性タッチスクリーンを遊ばします。 携帯電話はポリカーボネートのプラスチックで包装されていて、他のサムスンの携帯電話に似た湾曲した縁を持つ長方形の形です。 携帯電話は1.2 GHzデュアルコアプロセッサで動作し、1 GBのRAMを搭載しています。 Spice Mobilesは、S Mobility Ltd.の一部であり、Spice Groupの一部であるインドを拠点とする携帯会社です。 それ以来、同社はネパール、バングラデシュ、ウガンダ、タンザニア、ジンバブエおよびスリランカに事業を拡大しています。 それは象牙海岸からインドネシアにその地理的存在を拡大することを目指しています。 しかし、主にインドを拠点とする携帯電話会社として、