メソッドのオーバーロードとは、コンテキストに応じて、言語が同じメソッドを異なる結果で使用する機能であると言うリソースを見つけました。どういうわけか、他の定義を読んだとき、それが完全な定義ではないように感じました. メソッドのオーバーロードには他に何かありますか?
5 に答える
それはそれを説明するための非常に一般的な方法です。メソッドのオーバーロードを使用すると、単一のメソッド名を使用できますが、「コンテキスト」(通常は渡される引数の型または数) に応じて「オーバーロード」(複数のバージョンを提供) できます。各方法は別々であるため、「異なる結果」を引き起こす可能性があります。
たとえば、C# を使用すると、次のように記述できます。
void Foo() // Version with no arguments
{
}
void Foo(int arg) // Version with a single int
{
}
void Foo(string arg1, double arg2) // Version with string and double parameters
{
}
まず、プログラミングにおける署名とは何かを知っておく必要があります。関数のシグネチャはその表現です。関数の名前とそのパラメーターによって、その署名が決まります。
オーバーロードとは、必要に応じて関数のシグネチャを変更することを意味します。
次の例を見てください。
int sum(int x, int y, int z) {
return x + y + z;
}
int sum(int x, int y) {
return x + y;
}
現在、関数sum()
は 2 つの異なる方法で呼び出すことができます。2 つの引数で呼び出すか、3 つの引数で呼び出すことができます。必要に応じて署名を変更しました。2 つの引数に対して別の関数を記述する代わりに、同じ関数に負荷をかけます。これがオーバーロードとして知られている理由です。
同じ名前でパラメータが異なる多数のメソッドがある場所です。
public void kittens(String paws) {
}
public void kittens(String paws, boolean tail) {
}
両方とも、どちらかを使用して互いに独立して呼び出すことができます
kittens("fat");
また
kittens("thin", true);
この場合のコンテキストは、メソッドの引数シグネチャ、つまり引数の数と型によって決まります。
例えば:
methodName(int x, int y, int w, int h)
methodName(Vector x)
最初のメソッドの実装は、次の代わりになります。
methodName(new Vector(x, y, w, h))
一部の言語では、同じ名前のメソッド/関数を作成できますが、input
/otput
パラメーターが異なります。
古典的な例は、constructor overloading
Java のクラスの例です。
//Constructor without parameters
public User() {
}
//Constructor with only one parameter
public User(String username)
{
this.username = username;
}
//Constructor with two parameters
public User(String username, int age)
{
this.username=username;
this.age=age;
}
が異なることがわかるように、異なるパラメーターを受け入れる異なるコンストラクターを持つクラスがありますsignature
。