カテゴリ: JavaSilver試験対策 更新日: 2026/05/30

Javaのデフォルトメソッド完全解説!初心者が理解すべき基本ルール

043
Javaのデフォルトメソッド

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

生徒

「Javaのインタフェースにメソッドの実装を書いているコードを見たんですが、それって正しいんですか?」

先生

「いい質問ですね!インタフェースでは基本的に抽象メソッドしか定義できませんが、デフォルトメソッドという機能を使うと実装を持つことができます。詳しく見ていきましょう!」

1. デフォルトメソッドとは?

1. デフォルトメソッドとは?
1. デフォルトメソッドとは?

デフォルトメソッドは、Java 8で導入されたインタフェースの機能です。defaultキーワードを使うことで、インタフェースに実装を記述できます。これにより、実現クラスに共通の動作を提供できます。

以下はデフォルトメソッドの基本例です:


public interface Greetable {
    default void greet() {
        System.out.println("Hello, default method!");
    }
}

このようにdefaultキーワードを使えば、インタフェースに共通の処理を記述できます。

2. 実現クラスでデフォルトメソッドを使用する

2. 実現クラスでデフォルトメソッドを使用する
2. 実現クラスでデフォルトメソッドを使用する

実現クラスはデフォルトメソッドをそのまま利用できます。以下に、デフォルトメソッドを実現するクラスの例を示します:


public class Greeter implements Greetable {
    // デフォルトメソッドをオーバーライドせず、そのまま使用
}

public class Main {
    public static void main(String[] args) {
        Greetable greeter = new Greeter();
        greeter.greet(); // 出力: Hello, default method!
    }
}

このコードでは、GreeterクラスがGreetableを実現しており、デフォルトメソッドgreetをそのまま使用しています。

3. デフォルトメソッドのオーバーライド

3. デフォルトメソッドのオーバーライド
3. デフォルトメソッドのオーバーライド

実現クラスでデフォルトメソッドをオーバーライドして独自の実装を提供することも可能です。以下にその例を示します:


public class CustomGreeter implements Greetable {
    @Override
    public void greet() {
        System.out.println("Hello from CustomGreeter!");
    }
}

public class Main {
    public static void main(String[] args) {
        Greetable greeter = new CustomGreeter();
        greeter.greet(); // 出力: Hello from CustomGreeter!
    }
}

このコードでは、CustomGreeterクラスがGreetablegreetメソッドをオーバーライドしています。

Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

4. 複数インタフェースのデフォルトメソッド

4. 複数インタフェースのデフォルトメソッド
4. 複数インタフェースのデフォルトメソッド

クラスが複数のインタフェースを実現しており、それらが同じ名前のデフォルトメソッドを持つ場合、競合が発生します。このとき、クラス側でどの実装を使うかを明示的に指定する必要があります。


public interface A {
    default void show() {
        System.out.println("Default method from A");
    }
}

public interface B {
    default void show() {
        System.out.println("Default method from B");
    }
}

public class C implements A, B {
    @Override
    public void show() {
        A.super.show(); // Aのデフォルトメソッドを呼び出す
    }
}

public class Main {
    public static void main(String[] args) {
        C obj = new C();
        obj.show(); // 出力: Default method from A
    }
}

このように、インタフェース名.super.メソッド名()で特定のデフォルトメソッドを明示的に呼び出します。

5. 試験対策ポイント

5. 試験対策ポイント
5. 試験対策ポイント
  • defaultキーワードを使ってデフォルトメソッドを定義する。
  • 複数のインタフェースのデフォルトメソッドが競合した場合、superを使って解決する。
  • デフォルトメソッドはオーバーライド可能。

まとめ

まとめ
まとめ

本記事では、Javaのデフォルトメソッド(default method)について学びました。 デフォルトメソッドを活用すると、インタフェース側に共通処理を持たせられるため、実現クラス(implementsするクラス)での重複コードを削減できます。 また、既存のインタフェースにメソッドを追加しても、実装クラスをすべて修正せずに済むケースがあり、設計の拡張に強いのが特徴です。

重要なポイントは、デフォルトメソッドは「インタフェースなのに実装を持てる」という点です。 必要に応じて実装クラス側でオーバーライドでき、さらに複数インタフェースを実現したときに同名メソッドが存在して競合した場合でも、 インタフェース名.super.メソッド名()の形で呼び出し先を明示できます。 defaultキーワードの意味を押さえておくと、Javaのインタフェース設計をより実用的に組み立てられるようになります。

検索ニーズ向けの結論
Javaのデフォルトメソッドは、インタフェースに共通処理を追加できる仕組みです。 「実装クラスの修正コストを抑えたい」「共通ロジックをまとめたい」場面で効果があり、 競合時はインタフェース名.superで解決できます。

次のサンプルコードは、デフォルトメソッドの実践的な使い方を示しています(フォーマット処理をインタフェース側に寄せ、出力側で再利用しています)。


public interface Printer {
    default void print(String message) {
        System.out.println("Printing: " + message);
    }
}

public interface Formatter {
    default String format(String message) {
        return "[Formatted] " + message;
    }
}

public class ConsolePrinter implements Printer, Formatter {
    @Override
    public void print(String message) {
        System.out.println(format(message)); // Formatterのメソッドを活用
    }
}

public class Main {
    public static void main(String[] args) {
        Printer printer = new ConsolePrinter();
        printer.print("Hello, Java!");
    }
}

実行結果:


[Formatted] Hello, Java!
押さえておきたいポイント
  • デフォルトメソッドはインタフェースに実装(処理)を持たせられる。
  • 実装クラスでは必要に応じてオーバーライドできる。
  • 同名メソッドが複数インタフェースで競合した場合は明示的に解決できる。
先生と生徒の振り返り会話

生徒

「デフォルトメソッドって、普通のクラスのメソッドみたいに感じますね。インタフェースにこんな機能があるなんて驚きました!」

先生

「そうですね。デフォルトメソッドのおかげで、インタフェースが柔軟に使えるようになりました。 特に、既存のインタフェースに新しいメソッドを追加したいときに役立ちます。 実装クラスを全部修正しないといけない状況を減らせるので、保守性の面でもメリットが大きいですよ。」

生徒

「確かに!でも、複数のインタフェースに同じ名前のメソッドがあるときの競合解決は少し複雑ですね。」

先生

「その通りです。ただ、インタフェース名.super.メソッド名()を使えば、どのメソッドを呼び出すか明確に指定できます。 “どこに共通処理を置くか”と合わせて考えると、デフォルトメソッドの使いどころが分かりやすくなります。実際に試して慣れていきましょう!」

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

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

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

Java(ジャバ)のデフォルトメソッド(Default Method)とは、具体的にどのような機能のことを指すのでしょうか?初心者にもわかりやすく教えてください。

Javaのデフォルトメソッド(Default Method)とは、Java 8から導入された画期的な機能で、通常は「型」の定義のみを行うインタフェース(Interface)の中に、実際の具体的な処理内容(実装)を記述できる仕組みのことです。プログラミング初心者が混同しやすいポイントですが、従来のJavaではインタフェースに処理を書くことはできませんでしたが、このデフォルトメソッドが登場したことで、共通の動作をインタフェース側であらかじめ用意しておくことが可能になりました。キーワードとなる「default(デフォルト)」という修飾子をメソッドの先頭に付与することで、この機能を利用できるようになります。
JavaSilver試験対策の一覧へ
新着記事
Flutter
Flutterでのリポジトリパターンの実装例
Flutterでリポジトリパターンを実装する方法を完全解説!初心者向けアーキテクチャ設計入門
Java
Java の Objects クラスを使って null チェックを簡単にする方法
JavaのObjectsクラスの使い方を完全ガイド!nullチェックを簡単・安全に行う方法
Java
Java の UUID クラスを使って一意の識別子を作成する方法
JavaのUUIDクラスの使い方を完全ガイド!初心者でもわかる一意な識別子の作成方法
Java
Java の古い日付クラス(Date, Calendar)と新しい日付 API の違い
JavaのDateとCalendarと新しい日付APIの違いとは?初心者向け完全ガイド
人気記事
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
AWS
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク