close

上一篇文章的最後有提到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:在相同類別中定義出名字相同,但參數數量或型態不一的方法,讓其他類別因應情況呼叫相應的方法。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Chris_U in CSIE 的頭像
    Chris_U in CSIE

    Chris_U的CSIE部落格

    Chris_U in CSIE 發表在 痞客邦 留言(0) 人氣()