Java インターフェースのサンプル(interface)

Javaのインターフェースのサンプルです。

目次

インターフェース

1.インターフェースの宣言

アクセス修飾子  interface  インターフェース名  {
     public static final 変数の型 変数 = 値;  //定数
     public 戻り値の型 メソッド名(引数);  //抽象メソッド
}
  • インターフェースの宣言は、「interface」を記述します。
  • 定数と抽象メソッドを記述できます。
  • インターフェースは他のインターフェースも継承できます。
  • Java8からメソッドにdefaultをつけることでメソッドの内容を記述できるようになりました。

2.インターフェースを実装したクラス

アクセス修飾子  class  クラス名  implements  インターフェース名{
}
  • インターフェースを継承してクラスを定義することを「インターフェースを実装する」と言います。
  • インターフェースを実装するクラスには、「implements」を記述します。
  • インターフェースを実装したクラスはインターフェースで宣言されている抽象メソッドをオーバーライドする必要があります。
  • 1つのクラスに複数のインターフェースを実装することができます。その場合カンマで区切って記述します。
    →【違い】継承は、1つのクラスからのみできます。多重継承は不可です。
  • インスタンスの生成でインターフェースの型を指定することも可能です。その場合、指定したインターフェースにあるメソッドのみ使用できます。

コード

インターフェースのサンプルです。

package test1;

interface InterfaceA {
	String MOJI = "red";
	void printA();
} 
class Class1 implements InterfaceA{
	@Override
	public void printA() {
		System.out.println(MOJI);
	}
}
public class Test1 {
	public static void main(String[] args) {
		Class1 c1 = new Class1();
		c1.printA(); // red
	}
}

3~6行目は、インターフェースです。
4行目の変数は定数です。public static finalがついているとみなされます。
5行目は、抽象メソッドです。
7行目は、3行目のインターフェースを実装しています。
9行目は、5行目の抽象メソッドをオーバーライドしています。

 

クラスが複数のインターフェースを実装する

1つのクラスに複数のインターフェースを実装するサンプルです。

package test1;

interface InterfaceA {
	void printA();
}
interface InterfaceB {
	void printB(int cnt2);
}

class Class1 implements InterfaceA,InterfaceB {
	@Override
	public void printA() {
		System.out.println("a");
	}
	public void printB(int c) {
		System.out.println(c + 1);
	}
}
public class Test1 {
	public static void main(String[] args) {
		Class1 c1 = new Class1();
		c1.printA(); // a
		c1.printB(1); // 2
	}
}

10行目は、3行目と6行目のインターフェースを実装しています。

 

クラスがクラスの継承とインターフェースの実装を行う

クラスがクラスの継承とインターフェースの実装を行うサンプルです。

package test1;

interface InterfaceA {
	void printA();
}
class ClassTest{
}

class Class1 extends ClassTest implements InterfaceA{
	@Override
	public void printA() {
		System.out.println("a");
	}
}
public class Test1 {
	public static void main(String[] args) {
		Class1 c1 = new Class1();
		c1.printA(); // a
	}
}

9行目は、クラスを継承し、インターフェースを実装しています。

 

インスタンスの生成でインターフェースの型を指定する

インスタンスの生成でインターフェースの型を指定するサンプルです。

package test1;

interface InterfaceA {
	void printA();
}
interface InterfaceB {
	void printB(int cnt2);
}

class Class1 implements InterfaceA, InterfaceB {
	@Override
	public void printA() {
		System.out.println("a");
	}
	public void printB(int c) {
		System.out.println(c + 1);
	}
}
public class Test1 {
	public static void main(String[] args) {

		InterfaceA ia1 = new Class1();
		ia1.printA(); // a
		// ia1.printB(); //コンパイルエラー
 
		InterfaceB ib1 = new Class1();
		// ib1.printA(); //コンパイルエラー
		ib1.printB(1); // 2
	}
}

10行目のクラスは、3,6行目の2つインターフェースを実装しています。
22行目は、インスタンスの生成でインターフェース(InterfaceA)の型を指定しています。24行目のprintBメソッドは、InterfaceAにないので実行できません。
26行目は、インスタンスの生成でインターフェース(InterfaceB)の型を指定しています。27行目のprintAメソッドは、InterfaceBにないので実行できません。
22,26行目とも指定したインターフェースにあるメソッドのみ使用できます。

 

インターフェースのメソッドに処理内容を記述する(default)

インターフェースのメソッドに処理内容を記述するサンプルです。
defaultキーワードは、Java8から指定できるようになりました。

package test1;

interface InterfaceA {
	default void printA() {
		System.out.println("a");
	};
}
class Class1 implements InterfaceA{
}
public class Test1 {
	public static void main(String[] args) {
		Class1 c1 = new Class1();
		c1.printA(); // a
	}
}

3行目は、インターフェースです。
4行目は、メソッド名の前にdefaultをつけています。5行目にメソッドの処理内容を記述しているのでdefaultがないとコンパイルエラーになります。
8行目は、インターフェースを実装したクラスですがインターフェースのメソッドをオーバーライドしていません。
13行目は、メソッドを実行することができます。

※8行目のクラス内で4行目のdefaultメソッドをオーバーライドすることも可能です。

 

インターフェースが他のインターフェースを継承する

インターフェースが他のインターフェースを継承できます。

package test1;

interface InterfaceA {
	default void printA() {
		System.out.println("a");
	};
}
interface InterfaceB extends InterfaceA{
	default void printB() {
		System.out.println("b");
	};
}
class Class1 implements InterfaceB{
}
public class Test1 {
	public static void main(String[] args) {
		Class1 c1 = new Class1();
		c1.printA(); // a
		c1.printB(); // b
	}
}

8行目は、インターフェースがインターフェースを継承しています。

 

インターフェースにstaticメソッドを追加する

インターフェースにstaticメソッドを追加するサンプルです。

package test1;

interface InterfaceA {
	static void printA() {
		System.out.println("a");
	};
}
public class Test1 {
	public static void main(String[] args) {
		InterfaceA.printA(); // a
	}
}

4行目は、インターフェースにstaticメソッドを追加しています。
10行目は、staticメソッドを実行しています。

関連の記事

Java クラスの仕組みと使い方のサンプル
Java コンストラクタのサンプル
Java 抽象クラスと抽象メソッドのサンプル(abstract)
Java シングルトンのサンプル
Java ポリモフィズムのサンプル

△上に戻る