「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java ではメソッドのオーバーライドとメソッドのオーバーロードはどのように異なりますか?

Java ではメソッドのオーバーライドとメソッドのオーバーロードはどのように異なりますか?

2024 年 11 月 21 日に公開
ブラウズ:598

How do Method Overriding and Method Overloading Differ in Java?

Java における動的ポリモーフィズムと静的ポリモーフィズムの区別

動的ポリモーフィズムと静的ポリモーフィズムの違いを理解することは、Java を使用したオブジェクト指向プログラミングにおいて非常に重要です。この記事では、この概念を説明するための簡略化された説明と例を提供します。

動的ポリモーフィズムと静的ポリモーフィズム

ポリモーフィズムにより、単一のメソッド名に、必要に応じて複数の実装を持たせることができます。それを呼び出すオブジェクトタイプ。ポリモーフィズムには主に 2 つのタイプがあります:

  • 動的ポリモーフィズム (実行時バインディング): メソッド呼び出しは、実際のオブジェクトのクラスに基づいて実行時に解決されます。これはサブクラスでのメソッドのオーバーライドで発生し、遅延バインディングとも呼ばれます。
  • 静的多態性 (コンパイル時バインディング): メソッド呼び出しは、宣言された型に基づいてコンパイル時に解決されます。参照変数。これは、同じクラス内のメソッドのオーバーロードで発生し、早期バインディングとも呼ばれます。

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

メソッドのオーバーロードは、複数のメソッドが存在する静的多態性の一種です。同じクラス内に同じ名前のメソッドが存在しますが、パラメータが異なります。オーバーロードされたメソッドを呼び出すとき、Java は渡された引数の数と型に基づいて呼び出す適切なメソッドを決定します。

コード例 (メソッドのオーバーロード):

class Calculation {
  void sum(int a, int b) { System.out.println(a   b); }
  void sum(int a, int b, int c) { System.out.println(a   b   c); }

  public static void main(String[] args) {
    Calculation obj = new Calculation();
    obj.sum(10, 10, 10); // Output: 30
    obj.sum(20, 20); // Output: 40
  }
}

メソッド オーバーライド

メソッド オーバーライドは、同じ名前とシグネチャを持つメソッドが異なるクラスで宣言されますが、共通の親クラスを共有する動的ポリモーフィズムの一種です。オーバーライドされたメソッドを呼び出すとき、Java は実行時のオブジェクトの実際のクラスに基づいて呼び出すメソッドを決定します。

コード例 (メソッドのオーバーライド):

class Animal {
  public void move() {
    System.out.println("Animals can move");
  }
}

class Dog extends Animal {

  public void move() {
    System.out.println("Dogs can walk and run");
  }
}

public class TestDog {

  public static void main(String[] args) {
    Animal a = new Animal(); // Animal reference and object
    Animal b = new Dog(); // Animal reference but Dog object

    a.move(); // Output: Animals can move

    b.move(); // Output: Dogs can walk and run
  }
}
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3