「こんにちは、アミーゴ!メソッドのオーバーロードについて説明します。」

「あなたも過負荷にできるんですか?!なんて日だ!」

「彼らを使ってできることはたくさんありますが、今はそれについては触れません。」

"それが契約だ。"

「オーバーロードは非常に単純な操作です。実際にはメソッドに対する操作ですらないが、パラメトリック多態性という恐ろしい名前で呼ばれることもあります。」

覚えておく必要があるのは、クラス内のすべてのメソッドには一意の名前が必要であるということです。

「はい、わかっています。」

「そうですね、それは完全に真実ではありません。つまり、まったく真実ではありません。メソッドは一意の名前を持つ必要はありません。一意である必要があるのは、メソッド名とそのパラメーターの型の組み合わせです。この組み合わせもメソッド シグネチャとして知られています。」

コード コメント
public void print();
public void print2();
これは許可されています。2 つのメソッドには一意の名前が付いています。
public void print();
public void print(int n);
そして、これも許可されています。2 つのメソッドには一意の名前 (シグネチャ) があります。
public void print(int n, int n2);
public void print(int n);
ここでもメソッド名は一意です。
public int print(int a);
public void print(int n);
しかし、これは許されません。さまざまな型が渡されても、メソッドは一意ではありません。
public int print(int a, long b);
public long print(long b, int a);
しかし、これは許されています。メソッドのパラメータは一意です。

「それはどこかで見たことがある。」

「はい。「 System.out.println 」と入力すると、IntelliJ IDEA は、さまざまなパラメーターを使用する数十のバージョンの印刷メソッドを提案します。コンパイラーは単に、渡されたパラメーターの型に基づいて必要なメソッドを識別し、呼び出します。」

「それはそれほど難しいことではありません。しかし、それはポリモーフィズムではありません。」

「より正確に言えば、それはメソッドのオーバーライドではありません。」

ちなみに、パラメータ名は無関係であることを指摘しておきます。これらはコンパイル中に失われます。メソッドがコンパイルされると、その名前とパラメーターの型のみがわかります。