カテゴリ: Java 更新日: 2026/01/13
PR
独学でJavaを学んでいる方向け
「実務レベルに到達できるか不安」「1人だと詰まることが多い」場合は、 実践重視で学べる環境を一度確認しておくのも一つの手です。
EBAエデュケーション |学習内容・サポートを見る

Javaのインターフェースを完全ガイド!初心者でもわかる使い方と実装方法

インターフェース
インターフェース

先生と生徒の会話形式で理解しよう

生徒

「Javaのインターフェースって何ですか?どうやって使うんでしょうか?」

先生

「Javaのインターフェースは、クラスが実装すべきメソッドの枠組みを定義するものです。特定のメソッドを必ず持たせたいときに便利な仕組みなんですよ。」

生徒

「クラスと何が違うんですか?」

先生

「クラスと違って、インターフェースはメソッドの実装を持たず、名前とパラメータだけを宣言します。クラスはそれを実装して、自分なりの処理を定義します。それでは具体的に見ていきましょう!」

1. インターフェースとは?

1. インターフェースとは?
1. インターフェースとは?

Javaのインターフェースは、「このクラスは最低限これらのメソッドを持っていますよ」という約束を作る仕組みです。インターフェースそのものは処理内容を書かず、メソッド名や引数だけを宣言します。実際の処理は、そのインターフェースを実装するクラス側で書くという分担が特徴です。

この仕組みによって、異なるクラス同士でも共通のメソッドを持たせることができ、プログラム全体の見通しが良くなります。「どのクラスでも必ず同じメソッドを用意しておいてほしい」という場面で特に役立ち、初心者でも使いやすいシンプルなルールで統一できるのが大きな魅力です。

より具体的にイメージできるよう、簡単なインターフェースのサンプルを見てみましょう。ここでは「あいさつをする」という動作を共通化した例を使っています。


interface Greeter {
    void greet();
}

class MorningGreeter implements Greeter {
    @Override
    public void greet() {
        System.out.println("おはようございます!");
    }
}

class EveningGreeter implements Greeter {
    @Override
    public void greet() {
        System.out.println("こんばんは!");
    }
}

public class SimpleInterfaceExample {
    public static void main(String[] args) {
        Greeter m = new MorningGreeter();
        Greeter e = new EveningGreeter();

        m.greet();
        e.greet();
    }
}

この例のように、インターフェースを使うことで「greet」という共通メソッドを必ず持たせることができ、それぞれのクラスごとに好きなメッセージを実装できます。こうした使い方が、インターフェースの基本であり、Javaでよく利用される重要な概念です。

2. インターフェースの基本的な実装

2. インターフェースの基本的な実装
2. インターフェースの基本的な実装

ここでは、実際にインターフェースを使ったごくシンプルなサンプルを見ていきましょう。難しい用語よりも「どう書くのか」「何をしているのか」がイメージできることを大事にしながら進めます。例として、動物が「鳴く」と「食べる」という共通の動きを持つようなインターフェースを作ってみます。

まずは、Animalという名前のインターフェースを用意し、その中に「鳴く」「食べる」を表すメソッドだけを並べます。そのあとで、DogクラスとCatクラスがこのインターフェースを「実装する」という形で、それぞれの振る舞いを具体的なコードとして書いていきます。


interface Animal {
    void makeSound();
    void eat();
}

class Dog implements Animal {
    @Override
    public void makeSound() {
        System.out.println("ワンワン");
    }

    @Override
    public void eat() {
        System.out.println("ドッグフードを食べます");
    }
}

class Cat implements Animal {
    @Override
    public void makeSound() {
        System.out.println("ニャーニャー");
    }

    @Override
    public void eat() {
        System.out.println("キャットフードを食べます");
    }
}

public class InterfaceExample {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound();
        dog.eat();

        Animal cat = new Cat();
        cat.makeSound();
        cat.eat();
    }
}

このコードでは、最初にinterface Animalとしてインターフェースを宣言し、その中にmakeSoundeatという二つのメソッドだけを書いています。ここでは処理の中身は一切書かず、「こういう名前で、引数も戻り値もこうですよ」という形だけを決めている点がポイントです。

次に、DogクラスとCatクラスがimplements Animalと書くことで、「自分はAnimalインターフェースを実装します」と宣言しています。その結果、Animalで決めたメソッドを必ず用意しなければならないため、クラスの中でmakeSoundeatをそれぞれオーバーライドして、中身の処理を具体的に書いています。犬なら「ワンワン」、猫なら「ニャーニャー」といった具合に、同じメソッド名でも中身を変えられるところがインターフェースのわかりやすい特徴です。

mainメソッドの中では、Animal dog = new Dog();という形で、変数の型をインターフェース(Animal)にしている点にも注目してください。変数はAnimal型ですが、中身はDogクラスのインスタンスが入っています。同じようにAnimal cat = new Cat();とすれば、今度は猫のインスタンスをAnimal型として扱えます。

その状態でdog.makeSound()cat.makeSound()を呼び出すと、どちらもAnimal型の変数なのに、実際には中身のクラスに応じて、犬なら「ワンワン」、猫なら「ニャーニャー」とそれぞれの処理が動きます。インターフェースを使うと、このように「共通のメソッド名で呼び出せるけれど、中身の動きはクラスごとに変えられる」という基本的な書き方を自然に実現できます。


ワンワン
ドッグフードを食べます
ニャーニャー
キャットフードを食べます

プログラミングが初めての方は、まず「インターフェースでメソッド名だけの約束を作り、クラス側でその約束どおりに中身を書く」という流れを押さえておくと理解しやすくなります。上記のような小さなサンプルを何度か手で打ち込んで実行してみると、インターフェースの基本的な実装方法が自然と身についていきます。

PR

将来を見据えて、+αのスキルを身につけたい方へ

JavaやLinuxを学んでいても、「このままで市場価値は上がるのか」 「キャリアの選択肢を広げたい」と感じる方は少なくありません。

AIを学ぶならアイデミープレミアム

3. インターフェースのメリットと使用例

3. インターフェースのメリットと使用例
3. インターフェースのメリットと使用例

インターフェースを使うことで得られる主なメリットは以下の通りです:

  • コードの柔軟性: インターフェースを使えば、異なるクラスに共通の動作を持たせることができます。例えば、Animalインターフェースを使うことで、異なる動物のクラスに共通のメソッド(makeSoundeat)を実装させられます。
  • プログラムの拡張性: 新しいクラスを追加する場合、既存のインターフェースを実装するだけで、簡単にシステムを拡張できます。例えば、新しい動物クラスを作る際に、Animalインターフェースを実装するだけで済みます。
  • 多態性(ポリモーフィズム)の実現: インターフェースを使うことで、異なるクラスのインスタンスを同じ型(インターフェース型)で扱うことができるため、コードがシンプルになります。

4. デフォルトメソッドと静的メソッド

4. デフォルトメソッドと静的メソッド
4. デフォルトメソッドと静的メソッド

Java 8以降、インターフェースにデフォルトメソッド静的メソッドを追加できるようになりました。これにより、インターフェース内でメソッドの実装を持つこともできます。

デフォルトメソッドは、インターフェースを実装するクラスに共通の動作を提供するために使います。一方、静的メソッドは、クラスをインスタンス化しなくても呼び出せるメソッドです。


interface Greeting {
    void sayHello();

    default void sayGoodbye() {
        System.out.println("さようなら!");
    }

    static void welcome() {
        System.out.println("ようこそ!");
    }
}

class JapaneseGreeting implements Greeting {
    @Override
    public void sayHello() {
        System.out.println("こんにちは!");
    }
}

public class DefaultMethodExample {
    public static void main(String[] args) {
        Greeting greeting = new JapaneseGreeting();
        greeting.sayHello();
        greeting.sayGoodbye();
        Greeting.welcome();
    }
}

この例では、sayGoodbyeがデフォルトメソッド、welcomeが静的メソッドとして定義されています。


こんにちは!
さようなら!
ようこそ!

5. まとめ

5. まとめ
5. まとめ

Javaのインターフェースは、クラスに特定のメソッドを実装させるための強力な仕組みです。この記事を通じて、インターフェースの基本概念から、実装方法、メリット、さらにはJava 8以降に追加されたデフォルトメソッドと静的メソッドについて学びました。 インターフェースを使うことで、コードの柔軟性、拡張性、多態性(ポリモーフィズム)の実現が可能になります。また、インターフェースは設計の段階で役立つため、特に大規模なプロジェクトでその効果を発揮します。

以下に、インターフェースを使用したサンプルプログラムを再掲します。このコードは、デフォルトメソッドと静的メソッドの活用例を示しています。


interface Vehicle {
    void start();

    default void stop() {
        System.out.println("車を停止します。");
    }

    static void service() {
        System.out.println("車の点検を実行します。");
    }
}

class Car implements Vehicle {
    @Override
    public void start() {
        System.out.println("車が始動しました。");
    }
}

public class VehicleExample {
    public static void main(String[] args) {
        Vehicle car = new Car();
        car.start();
        car.stop();
        Vehicle.service();
    }
}

この例では、CarクラスがVehicleインターフェースを実装しています。startメソッドは必須の実装であり、stopメソッドはデフォルトメソッドとして提供されています。また、serviceは静的メソッドとして定義されています。

先生と生徒の振り返り会話

生徒

「インターフェースを使うと、複数のクラスに共通のメソッドを実装できるんですね。便利です!」

先生

「その通りです。特に異なるクラスを同じ型で扱いたいときや、新しいクラスを追加しても既存のコードを変更したくないときに役立ちます。」

生徒

「でも、デフォルトメソッドが追加されたのはなぜですか?」

先生

「いい質問ですね。デフォルトメソッドが追加されたのは、既存のインターフェースに新しいメソッドを追加しても、既存の実装クラスを壊さないようにするためです。」

生徒

「なるほど!静的メソッドはどんなときに使うのが良いですか?」

先生

「静的メソッドは、インスタンスに依存しないユーティリティ的な機能を提供するときに使います。例えば、点検や共通の計算処理などが挙げられます。」

生徒

「分かりました!これからはインターフェースを積極的に使ってみます!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Javaのインターフェースとは何ですか?初心者向けに簡単に教えてください。

Javaのインターフェースは、クラスが実装すべきメソッドの枠組みを定義するものです。メソッドの名前や引数を定義するだけで、処理内容は書かれていません。クラスがインターフェースを実装して具体的な処理を記述します。

インターフェースとクラスの違いは何ですか?

クラスはメソッドの実装を持つことができますが、インターフェースは持つことができません。また、インターフェースを使うと、異なるクラスに共通のメソッドを実装させることができます。

Javaのインターフェースを使うメリットは何ですか?

インターフェースのメリットは、コードの柔軟性、拡張性、多態性(ポリモーフィズム)の実現です。異なるクラスに共通の動作を持たせることができ、新しいクラスを追加しても既存のコードを変更する必要がありません。

Java 8で追加されたデフォルトメソッドとは何ですか?

デフォルトメソッドは、インターフェース内で実装を持つメソッドのことです。これにより、既存のインターフェースに新しいメソッドを追加しても、既存のクラスを変更する必要がありません。

インターフェースの静的メソッドはどんなときに使うべきですか?

静的メソッドは、インスタンスに依存しない共通の処理を提供するときに使います。例えば、ユーティリティ的な計算処理や、ログの出力処理に適しています。

インターフェースを実装するクラスで、すべてのメソッドをオーバーライドする必要がありますか?

はい、インターフェースを実装するクラスでは、インターフェースで定義されたすべての抽象メソッドをオーバーライドする必要があります。ただし、デフォルトメソッドはオーバーライドしなくても利用可能です。

インターフェース型の変数に異なるクラスのインスタンスを代入することはできますか?

はい、可能です。インターフェース型の変数には、そのインターフェースを実装したクラスのインスタンスを代入できます。これにより、多態性を実現できます。

インターフェースを使ったコードの例をもっと見たいのですが、どこで学べますか?

この記事内のコード例を参考にすると良いでしょう。また、公式ドキュメントやオンラインチュートリアルにも、多くの実例が掲載されています。

Javaでインターフェースと抽象クラスはどのように使い分けるべきですか?

インターフェースは、多重継承が必要な場合やクラス間で共通の動作を実装したいときに使います。一方、抽象クラスは共通のフィールドや部分的に実装されたメソッドを持たせたい場合に適しています。

インターフェースを学ぶときに初心者がつまずきやすいポイントは何ですか?

初心者がつまずきやすいポイントは、インターフェースとクラスの違いや、デフォルトメソッドや静的メソッドの使い方です。基本概念を理解し、小さな例から実装を試してみることをおすすめします。

Java Silver SE17(1Z0-825)の演習量を重視したい人には、 定番の問題集がこちらです。

徹底攻略 Java SE 17 Silver 問題集をAmazonで見る

※ Amazonアソシエイト・プログラムを利用しています

カテゴリの一覧へ
新着記事
PR

JavaやLinuxの検証環境に
低コストで使えるVPS

Thymeleafのth:blockの使い方を完全ガイド!初心者でもわかるテンプレートブロック管理
Thymeleafのth:selected属性の使い方を完全解説!初心者でもわかるセレクトボックス選択状態の指定方法
Spring MVCのルーティング設計をマスター!初心者向け@GetMappingと@PostMappingの基本と命名ルール
JSPのコメントタグとHTMLコメントの違いを徹底解説!初心者向けわかりやすい使い分け講座
PR 未経験からITエンジニアを目指す方へ

Javaを学んでいるけど、「このまま未経験で就職できるか不安」という20代向け。 学歴不問・無料サポートの就職支援という選択肢があります。

Tamesy |無料で面談予約
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
JavaのArrayListクラスとgetメソッドを完全解説!初心者でもわかるリストの要素取得
No.3
Java&Spring記事人気No3
JavaのIntegerクラスparseIntメソッド完全ガイド!初心者でもわかる文字列から数値変換
No.4
Java&Spring記事人気No4
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.5
Java&Spring記事人気No5
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
No.6
Java&Spring記事人気No6
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.7
Java&Spring記事人気No7
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.8
Java&Spring記事人気No8
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
PR

ローカルPCに依存しない開発環境という選択肢

Java・Linuxの検証や学習環境を、クラウド上ですぐに用意できます。

Java入門

Javaの基礎を体系的に学びたい場合は、文法だけでなく 「なぜそう書くのか」まで丁寧に解説されているため、 初心者でも理解しやすい定番の1冊です。

スッキリわかるJava入門 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Java実践

ジェネリクス、enum、シールクラスなどの型設計から、 関数型プログラミング(ラムダ式・Stream API)、 JVM制御やリフレクション、外部ライブラリの活用までを扱っており、 「Javaを使えるレベル」へ進むための内容が網羅されています。

スッキリわかるJava入門 実践編 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Spring入門

Spring Frameworkの全体像から、 Webアプリ開発で必要となる主要機能までを 体系的に解説している定番の入門書です。

Spring徹底入門 第2版 Spring FrameworkによるJavaアプリケーション開発

※ 紙の書籍・電子書籍どちらでも購入できます

PR 実務経験のあるエンジニア向け

Javaなどの実務経験があり、次のキャリアを検討している方向け。 IT・ゲーム業界に特化した転職支援サービスという選択肢もあります。

転職ボックス |IT・ゲーム業界専門