上一篇文章的最後有提到overloading(多載, 重載),
這篇文章將會舉一些例子來說明它的用法。
Code 1:
public class Car {
private int distance = 0;
// Method 1
public void move() {
System.out.println("Distance: " + distance);
}
// Method 2
public void move(int speed) {
System.out.println("Distance: " + (distance+=speed));
}
// Method 3
public void move(int speed, boolean forward) {
if (forward)
System.out.println("Distance: " + (distance+=speed));
else
System.out.println("Distance: " + (distance-=speed));
}
}
上面是"Car"類別的程式碼, 裡面有一個叫distance的實體變數、三個叫move的方法
那三個Method都會印出distance,顯示車走到多遠,看看主程式的程式碼
Code 2:
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.move(); // Method 1
car.move(50); // Method 2
car.move(40, false); // Method 3
}
}
主程式(Code 2)呼叫了3次同樣叫"move"這個方法,但每次傳的參數數量不一樣
我們看看輸出的結果:
Distance: 0
Distance: 50
Distance: 10
1. 第一行為Method 1的結果:由於Method 1是直接印出distance,所以印出原本distance的值 : 0
2. 第二行為Method 2的結果:Method 2是車子前進speed遠的方法,會印出distance+=speed
3. 第三行為Method 3的結果:Method 3是車子前進或後退speed遠的方法,會印出distance+=speed或會印出distance-=speed
除了名稱相同,參數數量不一樣外,不一樣的參數型態也視為overloading,再舉一個例子:
Code 3:
public class Car {
private int distance = 0;
// Method 1
public void move(int speed) {
System.out.println("Distance: " + (distance+=speed));
}
// Method 2
public void move(boolean stop) {
if (stop)
System.out.println("Stop");
}
}
Code 4:
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.move(50); // Method 1
car.move(true); // Method 2
}
}
我們看看輸出的結果:
Distance: 50
Stop
看得出來雖然都是呼叫同樣叫move的方法,但參數的型態不一樣,仍是呼叫出不同的方法。
總結一下甚麼叫overloading:在相同類別中定義出名字相同,但參數數量或型態不一的方法,讓其他類別因應情況呼叫相應的方法。
留言列表