////////////////////////////////////////////////////////////////////////////////
//  << j252d.java >>
//
//  クラス(5):インターフェース(統一的処理)
//
//  インターフェース名を型とする変数や配列は、そのインターフェースを実装して
//  いるクラスのオブジェクトを指すことができる。
//  このことを利用すると、クラスは異なっていても、同じインターフェースを
//  実装しているクラスに対して、インターフェース内のメソッドを統一的に処理できる。
//
//  (1)インターフェース(intf)の定義。
//  (2)インターフェース(intf)を実装するクラスC1。
//  (3)インターフェース(intf)を実装するクラスC2。
//  (4)インターフェース型の配列準備。
//  (5)クラス(C1)のオブジェクトの作成。
//  (6)クラス(C2)のオブジェクトの作成。
//  (7)インターフェース内メソッドmiへのアクセス。
//
///////////////////////////////////////////////////////////////////////////////

interface intf { //(1)
  void mi(); 
}

class C1 implements intf {
  public void mi() { //(2)
    System.out.println("クラス(C1)で実装されたインターフェイス内メソッド(mi)");
  }
}

class C2 implements intf { 
    public void mi() { //(3)
    System.out.println("クラス(C2)で実装されたインターフェイス内メソッド(mi)");
  }
}

class j252d {
  public static void main(String args[]) {

    intf obj[] = new intf[4]; //(4)

    // オブジェクト生成。
    obj[0] = new C1(); //(5)
    obj[1] = new C1(); //(5)
    obj[2] = new C2(); //(6)
    obj[3] = new C2(); //(6)

    for( int i=0; i<obj.length; i++ ) {
      System.out.print("(7)obj[" + i + "].mi():"); obj[i].mi(); //(7)
    }

  }

}
実行結果
% javac j252d.java
% java j252d
(7)obj[0].mi():クラス(C1)で実装されたインターフェイス内メソッド(mi)
(7)obj[1].mi():クラス(C1)で実装されたインターフェイス内メソッド(mi)
(7)obj[2].mi():クラス(C2)で実装されたインターフェイス内メソッド(mi)
(7)obj[3].mi():クラス(C2)で実装されたインターフェイス内メソッド(mi)