【Java】インターフェース・interface

■ 初めに

 * C# のインターフェース(以下の関連記事)とは、異なるので、メモっとく。
http://blogs.yahoo.co.jp/dk521123/30209838.html

■ インターフェースで定義できるもの

 * メソッド(定義のみ)
 * 定数 // ★ C#との違い ★
 * デフォルト実装 (from Java8) // ★ C#との違い ★

補足

 * インターフェイスに定義した変数は、「public static final」が付いているものとみなされる
 (メンバ変数みたいだが、定数になる)

■ 構文

インターフェース作成

public interface 【インターフェース名】
or
public interface 【インターフェース名】 extends 【スーパーインターフェース名】

インターフェースを継承したクラス

public class 【クラス名】 implements 【インターフェース名】
or
public class 【クラス名】 extends 【スーパークラス名】 implements 【インターフェース名】

■ 応用編

 * ジェネリックを利用する

 Javaジェネリックについては、以下の関連記事を参照のこと。
http://blogs.yahoo.co.jp/dk521123/32099558.html

インターフェース作成

public interface 【インターフェース名】<【ジェネリック】>
or
public interface 【インターフェース名】<【ジェネリック】> extends 【スーパーインターフェース名】<【ジェネリック】>

interface IDbObject<IdDataType> {
  IdDataType getId();
  void setId(IdDataType id);
  // 略
}

public class DbObject implements IDbObject<String> { // DBのIDをString/Long等のように変更できる
  // 略

■ デフォルト実装

public interface IGreeting {
  default String sayHello() {
    // default句を使う事で、インタフェース内にメソッドを実装可能
     return "Hello World!";
  }
}
http://equj65.net/tech/java8mixin/

■ サンプル

インターフェース:ISample

public interface ISample {
   public static final int CONSTANT_INT = 100;
   public String getName();
}

スーパー・インターフェース:ISuperSample

* 「インターフェース:ISample」を継承
public interface ISuperSample extends ISample {
   public String CONSTANT_STRING = "This is a sample.";
   public String getTitle();
}

インターフェイスを実装したクラス:Sample

* 「インターフェース:ISuperSample」を継承し実装。
public class Sample implements ISuperSample {
   public static void main(String[] args) {
      Sample sample = new Sample();
      System.out.println(sample.getName());
      System.out.println(sample.getTitle());
   }
   
   @Override
   public String getName() {
      return "Mike";
   }

   @Override
   public String getTitle() {
      return "Title : " + Sample.CONSTANT_STRING + " " + Sample.CONSTANT_INT;
   }
}

出力結果

Mike
Title : This is a sample. 100

■ インターフェースの命名規則

http://qiita.com/suin/items/00656d9dbd2f26dd8b91
に、たぶん、全ての命名パターンが載っている。


関連記事

C#】継承 [2] (インターフェース・interface)

http://blogs.yahoo.co.jp/dk521123/30209838.html