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

今日の新しくて興味深いトピックは、メソッドのオーバーロードです。注意してください。メソッドのオーバーロードとメソッドのオーバーライドを混同しないでください。

オーバーライドとは異なり、オーバーロードは非常に簡単な操作です。これは実際にはメソッドの操作ではありませんが、パラメトリック多態性というひどい用語で呼ばれることもあります。

ここでの問題は、クラス内のすべてのメソッドが一意の名前を持つ必要があることです。まあ、それは完全に正確ではありません。いや、もっと正確に言えば、それはまったく正確ではありません。メソッド名は一意である必要はありません。一意である必要があるのは、メソッド名とメソッドのパラメータの型の結合です。この結合はメソッド シグネチャとして知られています

例:

コード 説明
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);
しかし、これはできます。メソッドパラメータは一意です

シグネチャにはメソッド名とパラメータのタイプが含まれます。メソッドの戻り値の型とパラメータ名は含まれません。クラスには同じシグネチャを持つ 2 つのメソッドを含めることはできません。コンパイラーはどちらを呼び出すべきかを認識できません。

パラメータ名はコンパイル中に失われるため、重要ではありません。メソッドがコンパイルされると、その名前とパラメーターの型のみがわかります。戻り値の型は失われませんが、メソッドの結果を何にも割り当てる必要がないため、署名にも含まれません。

OOP の原則によれば、ポリモーフィズムは、単一のインターフェイスの背後にさまざまな実装を隠すことです。System.out.println()たとえば、メソッドを呼び出すと、渡された引数に応じて異なるメソッドが呼び出されます。これは実際のポリモーフィズムです。

このため、同じクラスに含まれる同じ名前の異なるメソッドは、ポリモーフィズムの弱い形式であると考えられます。