This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 1 year has passed since last update.

インターフェイス

Last updated at Posted at 2022-04-22

インターフェイス

メソッドの具体的な処理内容を記述せず、変数とメソッドの型のみを定義したもの。
メソッドの型だけを先に記述しておき、利用する直前で処理内容を記述することができる。

インターフェイスの宣言
interface インターフェイス名{}
インターフェイスの実装
クラス名 implements インターフェイス名{}

インターフェイを実装したクラスのインスタンス化では、インターフェイス名を変数の型として使う。

sample.java
public class Sample {

	public static void main(String[] args) {

		Flyable f1 = new FlyingPerson("太郎", 8, Person.MAN);// インターフェイスのインスタンス化
		f1.fly();

	}
}
Person.java
public class Person {
	final static int MAN = 1;
	final static int WOMAN = 2;

	String name;
	int age;
	int sex;

	public Person(String name, int age, int sex) {
		this.name = name;
		this.age = age;
		this.sex = sex;

	}

	public void sayHello(int time) {
		String m = this.getHelloMessage(time);
		System.out.println(m);
	}

	public void sayHello(int time, Person target) {
		String m = this.getHelloMessage(time);
		if (target != null) {
			System.out.println(target.name + "さん、" + m);
		} else {
			System.out.println(m);
		}

	}

	public String getHelloMessage(int time) {
		String text = "";
		if (5 <= time && time < 10) {
			text = "おはようございます";

		} else if (10 <= time && time < 17) {
			text = "こんにちは";
		} else {
			text = "こんばんわ";
		}
		String message = text + "、" + name + age + "才です。";
		return message;
	}

	public void addAge() {
		this.age++;
	}
}
Flyable.java
//インターフェイスの定義
public interface Flyable {

	void fly();// メソッドの定義

}

FlyingPerson.java
// Personクラスの継承とFlyableインターフェイスの実装
public class FlyingPerson extends Person implements Flyable {

	public FlyingPerson(String name, int age, int sex) {
		super(name, age, sex);
	}

	// インターフェイス内のメソッドを実装
	public void fly() {
		System.out.println("なんと人間が空を飛んでいます");
	}

}

上記のクラスの関係は以下の通り。
インターフェイス.png

抽象クラスとの違い

  • 抽象クラス
    継承関係にあるクラスに対してのみに影響を与える。すなわち、継承元であるスーパークラス(親クラス)は1つに限られている。
    一方で、メソッドのオーバーライドができるというメリットがある。すなわち、親クラスのメソッドをサブクラスで書き換えることができる。

  • インターフェイス
    継承関係なく、実装することができる。複数のインターフェースを継承して新しいインターフェースを作る(多重継承する)ことができる。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up