- メソッドをオーバーロードするさまざまな方法
- 番号を変更することで、引数の
- データ型を変更することで
- 戻り値の型を変更してもメソッドのオーバーロードができない理由
- main メソッドをオーバーロードできますか
- タイププロモーションによるメソッドのオーバーロード
もし クラス 同じ名前でパラメータが異なる複数のメソッドがあり、次のように呼ばれます。 メソッドのオーバーロード 。
操作を 1 つだけ実行する必要がある場合、メソッドの名前を同じにすると読みやすくなります。 プログラム 。
SQL複数テーブル選択
指定された数値の加算を実行する必要があるが、引数はいくつでも指定できるとします。2 つのパラメーターについては a(int,int)、3 つのパラメーターについては b(int,int,int) などのメソッドを作成すると、メソッドの名前が異なるため、他のプログラマだけでなく、メソッドの動作を理解するのが難しい場合があります。
そこで、プログラムを素早く理解するためにメソッドのオーバーロードを実行します。
メソッドのオーバーロードの利点
メソッドのオーバーロード プログラムの可読性が向上します 。
メソッドをオーバーロードするさまざまな方法
Javaでメソッドをオーバーロードするには2つの方法があります
- 引数の数を変えることで
- データ型を変更することで
Java では、メソッドの戻り値の型を変更するだけではメソッドのオーバーロードはできません。
1) メソッドのオーバーロード: 番号を変更します。引数の
この例では 2 つのメソッドを作成しました。最初の add() メソッドは 2 つの数値の加算を実行し、2 番目の add メソッドは 3 つの数値の加算を実行します。
この例では、 静的メソッド そのため、メソッドを呼び出すためのインスタンスを作成する必要はありません。
class Adder{ static int add(int a,int b){return a+b;} static int add(int a,int b,int c){return a+b+c;} } class TestOverloading1{ public static void main(String[] args){ System.out.println(Adder.add(11,11)); System.out.println(Adder.add(11,11,11)); }}今すぐテストしてください
出力:
22 33
2) メソッドのオーバーロード: 引数のデータ型の変更
この例では、異なる 2 つのメソッドを作成しました。 今すぐテストしてください
出力:
22 24.9
Q) メソッドの戻り値の型を変更するだけではメソッドのオーバーロードができないのはなぜですか?
Java では、あいまいさがあるため、メソッドの戻り値の型を変更するだけではメソッドのオーバーロードはできません。曖昧さがどのように発生するかを見てみましょう。
class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }}今すぐテストしてください
出力:
Compile Time Error: method add(int,int) is already defined in class Adder
System.out.println(Adder.add(11,11)); //ここで、Java はどの sum() メソッドを呼び出す必要があるかをどのように判断できるのでしょうか?
注: コンパイル時エラーは実行時エラーよりも優れています。したがって、同じパラメータを持つ同じメソッドを宣言すると、Java コンパイラはコンパイラ時エラーを返します。
Java main() メソッドをオーバーロードできますか?
はい、メソッドのオーバーロードにより可能です。メソッドのオーバーロードにより、クラス内に任意の数の main メソッドを含めることができます。しかし JVM 文字列配列を引数としてのみ受け取る main() メソッドを呼び出します。簡単な例を見てみましょう。
class TestOverloading4{ public static void main(String[] args){System.out.println('main with String[]');} public static void main(String args){System.out.println('main with String');} public static void main(){System.out.println('main without args');} }今すぐテストしてください
出力:
Photoshopでやり直す方法
main with String[]
メソッドのオーバーロードと型のプロモーション
一致するデータ型が見つからない場合、ある型は暗黙的に別の型にプロモートされます。以下の図で概念を理解してみましょう。
上の図に示すように、バイトは short、int、long、float、または double にプロモートできます。 short データ型は、int、long、float、または double に昇格できます。 char データ型は、int、long、float、double などに昇格できます。
TypePromotion を使用したメソッドのオーバーロードの例
class OverloadingCalculation1{ void sum(int a,long 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[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } }今すぐテストしてください
Output:40 60
一致が見つかった場合の型昇格によるメソッドのオーバーロードの例
メソッド内に一致する型引数がある場合、型の昇格は実行されません。
class OverloadingCalculation2{ void sum(int a,int b){System.out.println('int arg method invoked');} void sum(long a,long b){System.out.println('long arg method invoked');} public static void main(String args[]){ OverloadingCalculation2 obj=new OverloadingCalculation2(); obj.sum(20,20);//now int arg sum() method gets invoked } }今すぐテストしてください
Output:int arg method invoked
あいまいな場合の型プロモーションを使用したメソッドのオーバーロードの例
メソッド内に一致する型引数がなく、各メソッドが同じ数の引数をプロモートする場合、あいまいさが生じます。
class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } }今すぐテストしてください
Output:Compile Time Error