JAVASEインタフェース

2618 ワード

「インターフェース」(インタフェース)キーワードは抽象的な概念をより深くします.これを「純粋」抽象クラスとして想像することができます.作成者は、メソッド名、引数リスト、および戻りタイプを指定しますが、メソッドボディは指定しません.インタフェースには、基本データ型のデータメンバーも含まれていますが、デフォルトではstaticとfinalです.インタフェースは1つの形態のみを提供し、実装の詳細は提供しない.インタフェースは「私のすべてのクラスを実現するには、私の今のように見えるはずだ」と自分を説明しています.したがって、特定のインタフェースを採用したすべてのコードは、そのインタフェースに対してどのような方法が呼び出されるかを知っています.これがインタフェースのすべての意味です.したがって、インタフェースはクラスとクラスの間の「プロトコル」を確立するためによく使用されます.オブジェクト向けのプログラミング言語には、インタフェースと同じことをする「protocol」(プロトコル)というキーワードが採用されているものもあります.インタフェースを作成するには、classではなくinterfaceキーワードを使用します.クラスと同様に、interfaceキーワードの前にpublicキーワードを追加できます(ただし、インタフェースのみが同じ名前のファイル内に定義されています).あるいはそれを省略して「友好的」な状態をつくる.特定のインタフェース(またはインタフェースのセット)に一致するクラスを生成するには、implements(インプリメンテーション)キーを使用します.インタフェースはそのように見えますが、ここは具体的な仕事の詳細です.これらを除いて、私たちの他の仕事は継承と極めて似ています.
 
import java.util.*;

interface Instrument5 {
  // Compile-time constant:
  int i = 5; // static & final
  // Cannot have method definitions:
  void play(); // Automatically public
  String what();
  void adjust();
}

class Wind5 implements Instrument5 {
  public void play() {
    System.out.println("Wind5.play()");
  }
  public String what() { return "Wind5"; }
  public void adjust() {}
}

class Percussion5 implements Instrument5 {
  public void play() {
    System.out.println("Percussion5.play()");
  }
  public String what() { return "Percussion5"; }
  public void adjust() {}
}

class Stringed5 implements Instrument5 {
  public void play() {
    System.out.println("Stringed5.play()");
  }
  public String what() { return "Stringed5"; }
  public void adjust() {}
}

class Brass5 extends Wind5 {
  public void play() {
    System.out.println("Brass5.play()");
  }
  public void adjust() { 
    System.out.println("Brass5.adjust()");
  }
}

class Woodwind5 extends Wind5 {
  public void play() {
    System.out.println("Woodwind5.play()");
  }
  public String what() { return "Woodwind5"; }
}

public class Music5 {
  // Doesn't care about type, so new types
  // added to the system still work right:
  static void tune(Instrument5 i) {
    // ...
    i.play();
  }
  static void tuneAll(Instrument5[] e) {
    for(int i = 0; i < e.length; i++)
      tune(e[i]);
  }
  public static void main(String[] args) {
    Instrument5[] orchestra = new Instrument5[5];
    int i = 0;
    // Upcasting during addition to the array:
    orchestra[i++] = new Wind5();
    orchestra[i++] = new Percussion5();
    orchestra[i++] = new Stringed5();
    orchestra[i++] = new Brass5();
    orchestra[i++] = new Woodwind5();
    tuneAll(orchestra);
  }
}