JavaRush /Java Blog /Random-JA /インターフェースとは
fog
レベル 18

インターフェースとは

Random-JA グループに公開済み
インターフェイスは、何らかの動作を説明する、一般に受け入れられた公的契約 (合意) です。それらは何のために必要なのでしょうか? たとえば、文字列のリストを指すリンクがあるとします。最初にこのリストに多くの要素が追加され、その後リスト全体が 1 回処理されるとします。よく知られている推奨事項に従い、クラスを使用することに決めたとしますArrayList
ArrayList<String> list = new ArrayList<>();
私たちは、この文字列リストを使用するプログラムの動作を 100,500 行のコードで記述し、クラス固有のメソッドを使用してパフォーマンスを最適化しましたArrayList。たとえば、ensureCapacity()。行がリストの最後に追加されている限り、すべてが正常かつ迅速に機能します。しかし、今度は、主にリストの先頭に行を追加する、少し異なるタイプの作業に向けてプログラムの方向を変更する必要があります。このタイプの負荷には、この方法の方が適していますLinkedList。しかし、100,500 行のコードからなるプログラムを Rails に変換したい場合はLinkedList、特定のメソッドの使用を見つけて削除する必要がありArrayList、おそらくいくつかの場所でプログラムの個々のセクションのロジックが大幅に変更されます。ArrayListと の両方で使用できるメソッドのみを使用する場合はLinkedList、これを行う必要はありません。コードの 1 行、つまりリスト宣言を変更するだけです。
LinkedList<String> list = new LinkedList<>();
これらのクラスの共通メソッドの宣言を、おそらく抽象クラスの祖先クラスに配置すると便利であることがわかりますAbstractList。この場合、リストを次のように宣言できます。
AbstractList<String> list = new ArrayList<>();
そして、次のように実装をすぐに切り替えることができます。
AbstractList<String> list = new LinkedList<>();
ただし、この場合、 class の子孫ではなく、同じ動作を持つ同じメソッドを持つAbstractListより適切なクラスがあったとしても、 プログラムで使用できるクラスは class の子孫のみに制限されます。AbstractListどうすればいいですか?これがインターフェースが発明された理由です。インターフェイスは、まったく関係のないクラスがコミットできる一連のメソッドとその動作に関する規則であり、それらのいずれかを単一の参照で参照できるようにします。たとえば次のようになります。
List<String> list;
list = new ArrayList<>();
list = new LinkedList<>();
list = new AnotherListClass<>();
AnotherListClassクラスに共通の祖先クラスがない 場合でも、ArrayListを除きます。インターフェイスの良い例は車のステアリングです。車にはステアリング ホイール、ペダル、ギアボックスがあります。大多数の自動車では、これらの要素は同じ動作規則に従います。たとえば、ハンドルを反時計回りに切ると、メーカーに関係なく、車は速度を上げるのではなく左に曲がります。これらのコントロールの使い方を知っていれば、モデル、年式、メーカー、エンジンの種類に関係なく、どんな車でも簡単に扱うことができます。さらに、まったく異なるタイプの輸送物 (たとえば、宇宙船) が自動車と同じ制御インターフェイスを備えている状況を想像することもできます。車の運転方法を知っているあなたがそのような船の操縦席に座っていれば、このような状況で道に迷うことを避けることができます。もう一度繰り返してみましょう:LinkedListObject
  • インターフェイスとは、動作に関する契約(合意)です。
  • 多くのクラスは、継承によって関連付けられていないクラスであっても、この規約 (インターフェイスの実装) に従うことに同意することを宣言できます。
  • 動作の記述を別のインターフェイスに配置すると、コードの柔軟性が向上し、インターフェイスの実装 (インターフェイスを実装するクラス) を継承によって関連付けられていないクラスに切り替えることができるため、非常に便利です。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION