Javaにおけるメソッドオーバーロードの3つの実現方法とサンプルコード
Javaのメソッドオーバーロード(オーバーローディング)とは、同じクラス内に同名のメソッドを複数定義できる機能です。引数の構成が異なっていれば、同じ名前のメソッドを用途に応じて使い分けることができ、コードの可読性と再利用性が向上します。
メソッドオーバーロードは、主に以下の3つの方法で実現できます。
- メソッドの引数の数を変更する
- 引数のデータ型の順序を変更する
- 引数のデータ型そのものを変更する
注意点:戻り値の型だけではオーバーロードできない
戻り値の型だけが異なり、引数の構成がまったく同じメソッドを2つ定義することはできません。コンパイルエラーになるため、必ず引数に違いを持たせる必要があります。
サンプルコード
以下の例では、addという同じ名前のメソッドを4つ定義し、それぞれ異なる引数の構成でオーバーロードしています。
public class Tester {
public static void main(String args[]) {
Tester tester = new Tester();
System.out.println(tester.add(1, 2)); // 引数2つのint版
System.out.println(tester.add(1, 2, 3)); // 引数3つのint版
System.out.println(tester.add(1.0f, 2, 3)); // (float, int, int)版
System.out.println(tester.add(1, 2.0f, 3)); // (int, float, int)版
}
public int add(int a, int b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
public float add(float a, int b, int c) {
return a + b + c;
}
public float add(int a, float b, int c) {
return a + b + c;
}
}実行結果
3 6 6.0 6.0
解説
- add(1, 2):引数が2つの
add(int, int)が呼び出され、結果は「3」です。 - add(1, 2, 3):引数が3つの
add(int, int, int)が呼び出され、結果は「6」です。 - add(1.0f, 2, 3):第1引数がfloatのため
add(float, int, int)が呼び出され、戻り値もfloatとなり「6.0」と表示されます。 - add(1, 2.0f, 3):第2引数がfloatのため
add(int, float, int)が呼び出され、こちらも「6.0」と表示されます。
このように、Javaコンパイラはメソッド呼び出し時に渡される引数の数・型・順序をもとに、どのオーバーロードされたメソッドを実行すべきかを自動的に判断します。これにより、似たような処理をひとつのわかりやすいメソッド名でまとめることができます。
-
Java 9のdestroyForcibly()メソッドとは?プロセスを強制終了する方法を解説
destroyForcibly() メソッドは、実行中のプロセスを強制的に終了(キル)するために使用されます。このメソッドは、プロセスが正常に終了しない場合や、フリーズ(応答停止)してしまった場合に特に役立ちます。 例えば、destroyForcibly() を呼び出した後でも isAlive() メソッドが true を返すことがあります。これは、OSレベルでの終了処理が完了するまでに時間差があるためです。また、destroyForcibly() は終了要求が正常に受け付けられた場合は true を返し、そうでない場合は false を返します。 構文 boolean destroyForc
-
JavaでMapを反復処理する4つの方法:entrySet、keySet、Iterator、forEach徹底解説
この記事では、JavaでMap(マップ)をループ処理するためのさまざまな方法を紹介します。Java 8以降では、従来のfor文やIteratorクラスに加えて、forEachメソッドを使った簡潔な反復処理も可能になりました。用途に応じて最適な手法を選べるよう、代表的な4つのパターンをサンプルコードとともに解説していきます。 1. エントリー(キーと値)をまとめて反復処理する キーと値の両方を扱いたい場合は、entrySet()メソッドを使うのが最も一般的で効率的な方法です。Map.EntryからgetKey()とgetValue()でそれぞれ取得できます。 Map<Integer, In