これは、おそらくソフトウェア開発やソフトウェア品質保証に関連する 見ている私の経験からく多くの混乱させたり忘れたときの定義および利用抽象クラスおよびインタフェース. だから、私は誰も二度とそれで何の問題も抱えていないように、それを最も簡単にしたいと思っています。
抽象クラスとインターフェイスは、オブジェクト指向プログラミングの概念における二つの非常に重要なピボットです。,
まず、抽象クラスとその使用法について説明し、後でインターフェイスに移動します。
抽象クラスは、通常のクラスと区別したいときに見るのに特別なものではありません。 しかし、実装されていない、または宣言されていない、定義されていないいくつかのメソッドがあります。 その場合、これらのすべてのメソッドとクラス自体は”abstract”キーワードで名前が変更されます。
抽象クラスは、実装されていないメソッドの一つまたは複数の数を持つことができます。,
抽象クラスは適切ではないか、または通常のクラスと比較して理想的に定義されたメソッドを持っていないため、抽象クラスをインスタンス化
この抽象クラスを継承/拡張するクラスは、親抽象クラスのすべての抽象メソッドを実装/定義する必要があります。
いずれかのクラスが抽象メソッドの定義に失敗した場合、そのクラスも抽象クラスになります。,
使用法(想像上のケーススタディ):
1995年に、追加の機能を持つcarクラスを設計したとしましょう-飛ぶことができます。 あなたはcarクラスを非常にうまく設計しましたが、すべてのメソッドは非常に標準的で効率的でしたが、当時はcarFlying()メソッドを実装することはかなり したがって、carFlying()メソッドを空白または実装されていないままにしておきました(これはクラスだけでなく抽象メソッドであることがわかりました!).,
今日、私はあなたがすでに設計されており、技術はもはや不可能ではないその飛行車を実装したいと思います。 私が構築する車は、あなたの車に似たすべての機能を持っており、さらにそれは飛ぶことができます。 したがって、私ができることは、抽象クラスを継承(”extends”-javaの場合)することができ、そのcarFlying()抽象メソッドを定義/実装する必要があることです。 ここに行く! 当社の空飛ぶ車はロール。
したがって、さまざまなオブジェクト間でいくつかの共通の機能や動作があるときはいつでも、その機能を実装したメソッドとして一般的な抽象クラスを作成できます。, その場合、抽象メソッドを宣言し、それらの抽象メソッドをオブジェクトのニーズに応じて異なる方法で実装します。
抽象クラスの例:
もう一度、私たちは例を考えてみましょう、レスラーの束が再生するための時間あたりのお金の同じ量を取得します。 って異なるテーマや音楽の仕上げと闘う戦略です。 したがって、支払い方法をすべて同じに保ち、Wrestlerという名前のクラスに実装することができます。, Wrestler抽象クラスを継承する他のクラスの異なるオブジェクトに対して、これら二つを異なる方法で実装する必要があるため、themeMusic()メソッドとfinisher()メソッドを抽象として宣言しましょう。
そして、メイン。java:
Interface:
このチュートリアルの上部を正しく実行した場合、インターフェイスを理解することは非常に簡単になります。
インタフェースはクラスではなく、単なるインタフェースです。 メソッドのシグネチャだけです(基本的には抽象メソッドです!,いくつかの最終変数と静的変数を持つことができます。 そして、典型的なクラスは”拡張”ではなくインターフェイスを”実装”します。
複数のインターフェイスを一度に実装することができます(一般的には継承されます)。
インターフェイスを継承/実装するクラスは、インターフェイスのすべての抽象メソッドを定義する必要があります。
インターフェイス内のメソッドは、デフォルトではpublic、void、abstractです。
インターフェイスは、Javaプログラミング言語の多重継承の一種です。
インスタンスを生成できませんので界面のものように抽象的。, それらは不完全な実体であり、実現することを許されるべきではないからである。 なものであることは確かであるような活動スをインスタンス化方法では、匿名の内部クラスです。 それは今日の私たちの議題ではありません。
インターフェイスの使用:
インターフェイスはコーディング時間を節約します。 グローバルにアクセスできる静的およびfinal変数を含めることができます。 方法である抽象的な活用が進み、いつでも誰を実装するインターフェース。,
インターフェイスの例:
上記の抽象クラスの例では、抽象クラス内にボディを持つすべてのメソッドが同じで、他のメソッドが抽象クラスであることがわかりました。 ですが、全てのヘッジファンドだけます。 StoneColdクラスはWrestlerインタフェースを実装し、必要に応じて三つの抽象メソッドをすべて定義します。
この時間は、異なる力士は、時間あたりのお金の異なる量を取得します。 したがって、abstractと同じメソッドを配置し、オブジェクトの必要性に応じて他の場所で定義するのが最も便利です。,
public interface Wrestler {
public abstract void paymentForWork (int hours);
public abstract void themeMusic();
public abstract void finisher();
}
以下のクラスはWrestlerインターフェイスを実装しています。
メインのために。Java:
抽象クラスまたはインタフェースの場合にオブジェクトを開始する場合は、次のことを念頭に置いておくことができます。
A obj= new B();
//where A is an interface/abstract class. B is the concrete(implements/extends "A”)class which gives it’s memory to A’s obj to have access into B class and utilize its defined methods.