話の枕を書かずにやってみたら、シンプルになった。
あたりまえかw
お品書き
- オーバーロードって?
- メリットは?
- Sample
◆オーバーロードって?
設計図クラスを作るときに、同じ名前で引数の型や数が違うメソッドをいくつも定義できる。
メソッドを複数定義することをいう。
setDataをオーバーロードしている↓
class Student{
void setData(String n){ //名前の引数のみ
.
.
}
void aetData(String n, int e, int m){ //名前とint型の点数を2つ
.
.
}
}
オーバーロードしたのを呼び出すmainメソッド↓
main( ~ ){
Student stu = new Student(); //Studentクラスを基に変数stuを作りインスタンス化
stu.setData("大輔");
stu.setData("大輔", 80, 90);
.
.
}
インスタンス化した時のイメージ図↓
呼び出すメソッドは名前と引数の組み合わせで決めている。
もし、名前と引数の組み合わせで合うものがなければ、コンパイルエラーになる。
※戻り値の型は合っていなくても問題はない。
◆メリットは?
設計図クラスとしては、
同じデータを設定するためのメソッドなのでSetDataという同じ名前にした方が、同じような処理をしているのが見た目でわかるという
プログラム自体がわかりやすくなるのが大きなメリット。
メソッドをたくさん作った場合、その分別々の名前を付けることになると大変。
setData1..setData2..setData5..どれがどれ?みたいな。
これが、同じ名前で良いなら名前を付けるのがラク。
メソッドを呼び出す側としては、
メソッド名が変わらないため、使いやすいというメリット。
例えば、
System.out.println()
これもオーバーロードして使用されている。
そのため、int,double,boolean,Stirng等、全部println
メソッドとして呼び出して使える。
◆Sample
class Student2{
String name;
int engScore;
int mathScore;
void setData(String n){ //オーバーロード
name = n;
}
void setData(String n, int e, int m){ //オーバーロード
name = n;
engScore = e;
mathScore = m;
}
void setScore(int e, int m){
engScore = e;
mathScore = m;
}
void display(){
System.out.println(name + "さん");
System.out.println("英語" + engScore + "点・数学" + mathScore + "点");
}
}
class StuSample2{
public static void main(String[] args){
Student2 stu1 = new Student2(); //インスタンス化
Student2 stu2 = new Student2(); //インスタンス化
stu1.setData("大輔"); //インスタンス化した変数にデータ格納
stu1.setScore(90, 80); // 同上
stu1.display(); //表示するdisplayメソッドの呼び出し
stu2.setData("湊丞", 75, 100); //引数を3つまとめて格納
stu2.display();
}
}
C:\Java\1>javac StuSample2.java
C:\Java\1>java StuSample2
大輔さん
英語90点・数学80点
湊丞さん
英語75点・数学100点
C:\Java\1>
メソッドの呼び出しの時にはメソッド名と引数の2つの情報を見て、呼び出すメソッドを決めているのがポイント。
オーバーロードとは引数の型や数が違ければ、同じ名前で複数定義出来るということですな。