Javaのインターフェースとは?使い方をわかりやすく解説!

「Javaのインターフェースがよくわからない。わかりやすく教えて欲しい」
こんな疑問にお答えします。
本記事では、プログラミング言語「Java」のインターフェースについて解説します。

僕は現役のフリーランスエンジニアです。主にJavaを使った開発を行なっていますので、初心者の方にもわかりやすく解説していきますね。
インターフェースは実務でもよく使います。Javaエンジニアの方や、今後Javaの資格を取得されたい方は、ぜひ参考にしてみてください!
Javaのインターフェースとは
Javaのインターフェースとは、具体的な処理を記述せず、メソッドの型のみを定義したものです。インターフェースで定義したメソッドは、クラスでオーバーライドをし、具体的な処理を実装できます。
インターフェースをクラスで実装しなかった場合や、インターフェースで定義したメソッドをクラスで実装しなかった場合、コンパイルエラーが発生します。インターフェースを利用することで、メソッドの実装漏れを防げます。
Javaのインターフェースの使い方をわかりやすく解説
インターフェースの使い方をわかりやすく解説していきますね。
インターフェースの基本構文
まずは基本構文をみていきましょう。
アクセス修飾子 interface インターフェース名 {
// メソッドの宣言
}
上記が基本構文です。アクセス修飾子は、基本的にはpublicです。もしpublicを省略した場合、暗黙的にpublicになります。また、privateやprotectedは記述できません。インターフェース名に関しては、クラスに準ずるので、先頭は大文字です。
では具体的に記述してみます。
public interface Animal {
void dog();
void cat();
}
上記の通り。インターフェースに定義するメソッドは、抽象メソッドであれば「abstract」を記述します。もし省略した場合、暗黙的にabstractになります。
インターフェースを実装する方法
ではクラスでインターフェースを実装する方法を見ていきましょう。インターフェースはクラス名の右側に「implements」を使って実装します。ちなみにimplementsとは、「実装」という意味なので、覚えやすいですね。
まずはインターフェースを定義します。
public interface Animal {
void dog();
void cat();
}
以下でインターフェース「Animal」を実装したクラスを定義します。
public class AnimalPark implements Animal {
public void dog() {
System.out.println("ワン");
};
public void cat() {
System.out.println("ニャー");
};
}
public class Main {
public static void main(String[] args){
AnimalPark animals = new AnimalPark();
animals.dog();
animals.cat();
}
}
実行結果:
ワン
ニャー
もし、インターフェースに定義した抽象メソッドをオーバーライドしなかった場合、コンパイルエラーになります。大規模なシステム開発になると、多人数での開発です。あらかじめインターフェースにメソッドを記述しておくことで、実装漏れのリスクをおさえられます。
デフォルトメソッドの書き方
デフォルトメソッドの書き方です。インターフェースは具体的な処理が記述されているメソッドは定義できませんでしたが、Java SE8からデフォルトメソッドを定義することで具体的な処理を記述できるようになりました。
public interface Hello {
default String hello(){
return "Hello World";
};
}
デフォルトメソッドは、オーバーライドせずに、呼び出します。
public class World implements Hello {
// オーバーライドしない
}
public class Main {
public static void main(String[] args){
World world = new World();
System.out.println(world.hello());
}
}
実行結果:
Hello World
privateで記述も可能
Java SE9からはデフォルトメソッドをprivateで定義できるようになりました。privateで記述する場合、defaultを省略します。
public interface Hello {
private String hello(){
return "Hello World";
};
}
staticeメソッドの書き方
インターフェースはstaticメソッドを定義できます。staticメソッドもdefaultと同様に具体的な処理内容を記述できます。
public interface Hello {
static String hello(){
return "Hello World";
};
}
public class Main {
public static void main(String[] args){
System.out.println(Hello.hello());
}
}
インターフェースのstaticメソッドは、オーバーライドすることはできません。インターフェースに限りませんが、staticメソッドはオーバーライド不可です。また、staticメソッドを呼び出すには、「インターフェース名.staticメソッド名」で呼び出せます。
実行結果:
Hello World
Javaのインターフェースで定義できること、できないこと
インターフェースでできることとできないことを、見ていきましょう。
インターフェースでできること
以下はインターフェースでできることです。
- 抽象メソッド
- staticメソッド
- privateメソッド
- デフォルトメソッド
- 定数の定義
インターフェースできないこと
以下はインターフェースでできないことです。
- インスタンス化(new)
- protectedでの記述
Javaのインターフェースと抽象クラスの違いは?
インターフェースと抽象クラスの違いは、簡単にいうと多重継承できるかどうかです。抽象クラスは「extends」を使って継承できますが、1つのクラスしか継承できません。
abstract class Dog {
void dog();
}
class Cat extends Dog {
public void dog() {
System.out.println("ワン");
}
}
一方でインターフェースの場合は、1つに限らず、複数実装できます。
public interface A {
void a();
}
public interface B {
void b();
}
class S implements A,B {
void a(){
System.out.println("A");
};
void b() {
System.out.println("B");
};
}
まとめ
Javaのインターフェースについて解説しました。インターフェースは実務でもよく使いますので、ぜひ覚えてみてくださいね。
以下の記事では、Javaエンジニアになるためのロードマップをまとめていますので、あわせて参考にしてみてください。
