Javaコラム Javaエンジニアのためのお役立ちコラム

Javaのオーバーロードについてわかりやすく解説!戻り値の違いではオーバーロードにならない

2021年07月29日
SE
Javaのオーバーロードとはどのようなことなのでしょうか。
PM
1つのクラスで同じ名前のメソッドを複数実装することです。

Javaのオーバーロードとは?


Javaのオーバーロードとは、1つのクラスで同じ名前のメソッドを複数実装することです。同じ名前でどうやって区別するのかと言えば、パラメータのフィールドの型や数、並び順の違いで区別します。

以下がJavaのオーバーロードの例です。disp_strが2つありますが、別のメソッドとして扱われ、パラメータの違いにより正しく呼ばれます。

実行すると、以下のように表示されます。

パラメータがありません
文字列を渡しました

戻り値の違いではオーバーロードにならない

Javaのオーバーロードはパラメータの違いで同名メソッドが別扱いになりますが、戻り値の違いだけでは別扱いになりません。以下の場合はコンパイルエラーになります。

戻り値があるメソッドは、それを受け取らないことも可能なので、戻り値の有無や型では判別しきれないからです。

フィールドの名前が違うだけでもオーバーロードにならない

以下のようにパラメータのフィールド名が違っていても、型が同じだとやはりエラーになります。これもメソッドを呼び出す時、どちらなのか判別ができないからです。

パラメータの順番が違えばオーバーロードはできる

ただし、上に似たケースでも、パラメータの順番を入れ替えればオーバーロードができます。以下のJavaサンプルをご覧ください。

これはエラーにならず、実行すると以下のように表示されます。パラメータの順番が違っていれば、呼び出す時に判別がつくということです。

1 文字列を渡しました100
2 文字列を渡しました200

メソッドのパラメータは通常は型変換をしてくれる

以下のようなケースの場合、パラメータにint型の100を指定していますが、disp_valの側ではfloat型の100.0fに変換してくれます。

実行結果は以下になります。

float型の100.0

オーバーロードでは型変換をあてにできない

ところが、以下のJavaサンプルのようにint型とfloat型のオーバーロードを行うと、結果は「int型の100」になります。オーバーロードではパラメータの値が型変換されず、その型で呼び出しが切り替わるということです。

パラメータの型を適切に指定する

オーバーロードを使う場合、メソッドを呼び出す時のパラメータの型を適切に指定する必要があるということです。以下のJavaサンプルをご覧ください。

オーバーロードはパラメータの型を明確にする必要がある

上のJavaサンプルはdisp_valメソッドを呼び出す側で型を明確にしているので、正しくオーバーロードの呼び分けができます。結果は以下になります。

char型のa
byte型の100
int型の100
long型の100
float型の100.0
double型の100.0

なおJavaのbyte型は、longのl、floatのf、doubleのdのような接尾語が無いので、(byte)でキャストするか、byte型の変数を渡す必要があります。

SE
オーバーロードはパラメータの型を明確にする必要があるのですね。
PM
パラメータの違いによって処理が変わることを覚えておきましょう。

Javaのオーバーロードを有効活用しよう

Javaのオーバーロードについて解説しましたが、ご理解頂けましたでしょうか。同じメソッド名でパラメータの違いにより処理を変えられるオーバーロードはとても便利なので、是非活用してください。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

recommended

Categories

Tags