Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaにおけるメソッドのオーバーロードとオーバーライドの違いを徹底解説

Javaのオブジェクト指向プログラミングにおいて、メソッドのオーバーロード(Overload)メソッドのオーバーライド(Override)は、どちらもポリモーフィズム(多態性)を実現するための重要な仕組みです。名前は似ていますが、その動作原理や用途はまったく異なります。本記事では、両者の違いをわかりやすく解説します。

メソッドのオーバーロードとは

メソッドのオーバーロードとは、同じクラス内に同じ名前のメソッドを複数定義する機能です。ただし、引数の数や型が異なる必要があります。戻り値の型だけが異なる場合はオーバーロードとして認識されない点に注意しましょう。

コード例

class Calculator {
    int add(int a, int b) {
        return a + b;
    }

    double add(double a, double b) {
        return a + b;
    }

    int add(int a, int b, int c) {
        return a + b + c;
    }
}

このように、同じ「add」というメソッド名でも、引数の構成が異なればそれぞれ別のメソッドとして扱われます。これにより、呼び出し側はメソッド名を統一できるため、コードの可読性が向上します。

メソッドのオーバーライドとは

メソッドのオーバーライドとは、スーパークラスで定義されたメソッドをサブクラスで再定義する機能です。メソッド名・引数・戻り値の型がすべて同一である必要があります。オーバーライドされたメソッドは、実行時に実際のオブジェクトの型に基づいて呼び出されます。

コード例

class Animal {
    void sound() {
        System.out.println("動物が鳴きます");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("ワンワン!");
    }
}

この例では、DogクラスがAnimalクラスのsound()メソッドを上書きしています。これにより、サブクラスはスーパークラスの実装を独自の処理に置き換えることができます。

オーバーロードとオーバーライドの主な違い

  • ポリモーフィズムの種類: オーバーロードはコンパイル時(静的)ポリモーフィズムであり、オーバーライドは実行時(動的)ポリモーフィズムです。
  • 目的: オーバーロードはコードの可読性を高めるために使われ、オーバーライドはサブクラスでスーパークラスのメソッド実装を具体的かつ専用のものに置き換えるために使われます。
  • 定義場所: オーバーロードは同一クラス内で行われるのに対し、オーバーライドは継承関係にあるサブクラスで行われます。
  • 引数のルール: オーバーロードでは引数の数または型が異なる必要がありますが、オーバーライドでは引数が完全に同一である必要があります。
  • バインディングのタイミング: オーバーロードはコンパイル時にどのメソッドが呼ばれるか決まりますが、オーバーライドは実行時に決定されます。
  • アクセス修飾子: オーバーライドでは、スーパークラスのメソッドより制限の厳しいアクセス修飾子を指定できません。

まとめ

オーバーロードとオーバーライドは、どちらもJavaの柔軟な設計を支える重要な概念です。オーバーロードは「同じクラス内での同名メソッドの再定義」オーバーライドは「継承関係におけるメソッドの上書き」と覚えておきましょう。それぞれの特性を正しく理解して使い分けることで、保守性が高く拡張しやすいコードを書くことができます。

  1. Javaの同時実行性 – Thread.yield()メソッドの仕組みと使い方

    yield()メソッドとはjava.lang.Thread.yield()メソッドは、現在実行中のスレッドが自発的にCPUの使用権を手放し、より優先度の高い他のスレッドに実行の機会を譲るよう、スレッドスケジューラにヒントを伝えるためのメソッドです。処理に時間がかかっている重要度の低いスレッドよりも、優先して実行すべきスレッドを先に進めたい場面で利用されます。スレッドがyield()を呼び出すと、「自分の実行を一時停止してもよい」という合図がスケジューラに送られます。ただし、この合図を受け入れるか無視するかはスケジューラの判断に委ねられており、必ず譲るとは限らない点に注意が必要です。yield(

  2. Java 9のdestroyForcibly()メソッドとは?プロセスを強制終了する方法を解説

    destroyForcibly() メソッドは、実行中のプロセスを強制的に終了(キル)するために使用されます。このメソッドは、プロセスが正常に終了しない場合や、フリーズ(応答停止)してしまった場合に特に役立ちます。 例えば、destroyForcibly() を呼び出した後でも isAlive() メソッドが true を返すことがあります。これは、OSレベルでの終了処理が完了するまでに時間差があるためです。また、destroyForcibly() は終了要求が正常に受け付けられた場合は true を返し、そうでない場合は false を返します。 構文 boolean destroyForc