LoginSignup
1
0

More than 1 year has passed since last update.

Javaオーバーロード 型は数で認識されるのか順番で認識されるのか

Posted at

はじめに

スクールでメソッドやコンストラクタを呼び出す際、引数名と型が違えば同名のメソッドやコンストラクタを定義して呼び出せるオーバーロードを学習しました。その際に出てきた疑問を整理して以下の例題で検証してみました。

public class Overload {
//引数なし
public void sayHello() {
	System.out.println("こんにちは!");
}
//引数name
public void sayHello(String name) {
	System.out.println("こんにちは!私の名前は" + name + "です。");
}
//引数name, hobby
public void sayHello(String name, String hobby) {
	System.out.println("こんにちは!私の名前は" + name + "です。趣味は" + hobby + "です。");
}

public static void main(String[] args) {
	//Overloadクラスをインスタンス化
	Overload over = new Overload();
	//引数なし
	over.sayHello();                   //
	//引数name                         //
	over.sayHello("山田太郎");         // オーバーロード
	//引数name, hobby                  //
	over.sayHello("山田太郎", "釣り"); //
}
//演算結果
//こんにちは!
//こんにちは!私の名前は山田太郎です。
//こんにちは!私の名前は山田太郎です。趣味は釣りです。


引数名が違う・型は同じ → ×

以下のようにしても、型が同じなのでエラーになりました。
つまり型が同じものの場合は個数で区別しているらしい。

public void sayHello(String name, String hobby)
public void sayHello(String hobby, String name)

引数名が同じ・型は違う → 〇

以下のようにすれば可能だった。つまり変数名はあまり関係ないようである。
が、引数名のお作法的にアウトでしょw

public void sayHello(String name, String hobby)
public void sayHello(int name, int hobby)

順番が違う → 〇

ここが一番気になったところである。以下の通りに新たに作って検証。
結果はどちらも正常に出力された。
つまり個数は同じでも順番が違えば区別してくれる。

public void sayHello(String name, int age) {
	System.out.println("こんにちは!私の名前は" + name + "です。年齢は" + age + "です。");
}

public void sayHello(int age, String name) {
	System.out.println("こんにちは!私の名前は" + name + "です。年齢は" + age + "です。");
}

まとめ

オーバーロードにおいて、どの型がどの順番になっているかでJavaは区別している。
意外と細かく見てくれているのね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0