Javaのinterfaceキーワードでインターフェースを定義する方法!初心者向け完全ガイド
生徒
「Javaのinterfaceって何ですか?どうやって使うんですか?」
先生
「interfaceはJavaでインターフェースを定義するためのキーワードです。インターフェースを使うと、クラスに共通の動作を強制的に実装させることができますよ。」
生徒
「なるほど!じゃあ、自分でインターフェースを作るにはどうすればいいんですか?」
先生
「それでは、interfaceキーワードを使ってインターフェースを作る方法を、サンプルコード付きでしっかり解説していきましょう!」
1. Javaのinterfaceキーワードとは?
Javaにおけるinterface(インターフェース)とは、クラスが実装すべきメソッドの定義だけを集めた設計図のような存在です。インターフェースには実際の処理は書かず、どんなメソッドを持っておくべきかだけを定義します。
interfaceキーワードを使うことで、クラスに「このメソッドは必ず実装してね」と強制することができます。これにより、複数のクラス間で共通のルールや機能を持たせることができます。
2. interfaceキーワードの基本構文
Javaでインターフェースを定義するには、以下のようにinterfaceキーワードを使います。
interface インターフェース名 {
戻り値の型 メソッド名();
}
たとえば、動物が持つ「鳴く」という動作をインターフェースとして定義する場合は、次のように書けます。
interface Animal {
void speak();
}
3. interfaceをクラスで実装する方法
定義したインターフェースは、implementsキーワードを使ってクラスに実装します。インターフェースで定義されたすべてのメソッドは、必ずそのクラス内でオーバーライドする必要があります。
interface Animal {
void speak();
}
public class Dog implements Animal {
public void speak() {
System.out.println("ワンワン");
}
public static void main(String[] args) {
Dog dog = new Dog();
dog.speak();
}
}
ワンワン
このように、インターフェースを実装すると、クラスに共通の振る舞いを持たせることができ、コードの再利用性や保守性も高まります。
4. 複数のinterfaceを同時に実装する
Javaのクラスは1つのクラスしか継承できませんが、インターフェースは複数同時に実装することができます。これはJavaの大きな特徴のひとつです。
interface Walkable {
void walk();
}
interface Swimmable {
void swim();
}
public class Duck implements Walkable, Swimmable {
public void walk() {
System.out.println("ヨチヨチ歩く");
}
public void swim() {
System.out.println("スイスイ泳ぐ");
}
public static void main(String[] args) {
Duck duck = new Duck();
duck.walk();
duck.swim();
}
}
ヨチヨチ歩く
スイスイ泳ぐ
このように、interfaceを使えば、さまざまな機能を自由に組み合わせることが可能です。
5. interface内の定数とメソッドの扱い
Javaのインターフェースでは、変数は自動的にpublic static finalになり、メソッドはpublic abstractが暗黙的に付与されます。
たとえば次のように書いた場合でも:
interface Config {
int MAX_COUNT = 100; // public static final が自動的に付く
void reset(); // public abstract が自動的に付く
}
クラス側で実装するときは、以下のように書きます。
public class Counter implements Config {
public void reset() {
System.out.println("カウントをリセットしました。最大値は " + MAX_COUNT);
}
public static void main(String[] args) {
Counter c = new Counter();
c.reset();
}
}
カウントをリセットしました。最大値は 100
定数もそのまま使用できますし、メソッドも必ずオーバーライドが必要です。
6. defaultメソッドで処理を定義する
Java 8以降、インターフェースでもdefaultメソッドを使って処理内容を定義できるようになりました。これは、後からインターフェースに機能を追加したい場合に便利です。
interface Printer {
default void print(String msg) {
System.out.println("出力: " + msg);
}
}
public class ConsolePrinter implements Printer {
public static void main(String[] args) {
ConsolePrinter cp = new ConsolePrinter();
cp.print("こんにちは");
}
}
出力: こんにちは
defaultメソッドは必要に応じてオーバーライドも可能です。
7. interfaceを使う場面と設計のポイント
Javaのinterfaceを使うのは、以下のような場面が多いです。
- 異なるクラスに同じ振る舞いを持たせたいとき
- 外部ライブラリやAPIとの共通インターフェースを定義したいとき
- オブジェクト指向の設計で、依存性を減らしたいとき
- テスト時にモッククラスなどを簡単に差し替えたいとき
interfaceをしっかり理解すると、コードの保守性が大きく向上し、より柔軟で再利用しやすい設計ができます。