Java学習ノート(1):リロード方法

1229 ワード

リロード方法とは?
Javaでは2つの名前の同じ変数を定義することは許されませんが、名前の同じ関数を定義することができます.簡単に言えば、リロード方法は一連の名前の同じ方法です.
なぜリロード方法を使うのですか?
例を挙げると、三角形、矩形、円の面積計算方法が異なるため、グラフィック面積を計算する関数を定義する必要がある場合があります.だから面積を計算する関数が足りないので、もちろん図形ごとに面積を計算する関数を定義することもできますが、そうすると面倒になり、プログラミング者は名前の異なる関数をたくさん覚える必要があります.そこで言語設計設計者は簡単な方法を提供しました.各図形に面積を計算する関数を書いて、同じ名前を付けて、コンパイラがどれを使うべきかを選ぶことができます.
コンパイラはリロード方法をどのように区別しますか?
コンパイラは、異なるパラメータリストによってリロード方法を区別します.異なるパラメータリストとは、パラメータの個数が異なり、パラメータのタイプが異なり、パラメータの順序が異なることを意味します.
例えば;
int f(int a,int b){
     return a+b;
}
int f(int a,int b,int c){
    return a+b+c;
}
int f(int a,char b){
    return a+b;
}
int f(char a,int b){
    return a+b;
}

以上の方法でjavaコンパイラは区別できます.パラメータを渡す過程でcharタイプは適切な方法が見つからない場合、自動的にint整形に変換されます.3番目と4番目のメソッドがない場合は、呼び出します.
f(1,'a');

コンパイラは最初のメソッドを選択して実行します.パラメータタイプのアップグレードは自動的ですが、ダウン狭窄化には手動で書き込み強制変換が必要です.
Javaではパラメータのデフォルト値を指定できません.例えばvoid f(int a=1,b){}コンパイラはエラーを報告しますが、C++では使用できます.
なぜ戻り値タイプで区別しないのですか?
たとえば、次の2つの方法があります.
void f(){}
int f(){return 5;}

このように呼び出すと、int v=f();コンパイラはどれを使うか知ることができますが、このように書くと:f();この場合は不明なので、戻り値でリロード方法を区別するのは適切ではありません.