天天看點

Java重載方法

1.定義

重載方法是指擁有相同的方法名,不同簽名的方法。

簽名是指方法參數的個數和類型。

PS:僅僅傳回值類型不同的方法不是重載方法。因為調用方法時不知道到底調用哪一個方法。

2.調用重載方法

2.1參數隻有一個時

public class OverTest {
	void play(boolean i){
		System.out.println("調用了參數為boolean型的方法");
	}
	void play(char i){
		System.out.println("調用了參數為char型的方法");
	}
	void play(byte i){
		System.out.println("調用了參數為byte型的方法");
	}
	void play(short i){
		System.out.println("調用了參數為short型的方法");
	}
	void play(int i){
		System.out.println("調用了參數為int型的方法");
	}
	void play(long i){
		System.out.println("調用了參數為long型的方法");
	}
	void play(float i){
		System.out.println("調用了參數為float型的方法");
	}
	void play(double i){
		System.out.println("調用了參數為double型的方法");
	}
	public static void main(String[] args) {
		OverTest test=new OverTest();
		test.play('i');
	}

}
           

這時程式輸出的結果是:

調用了參數為char型的方法

說明這是調用了參數為char型的方法,當我們把參數為char型的方法注釋掉後會怎麼樣。

這時程式輸出的結果是:調用了參數為int型的方法

說明這是調用了參數為int型的方法,為什麼會這樣呢?

當我們調用test.play('i')時,程式會去查找OverTest類中的play(char i)方法。當沒有這個方法時,怎麼辦。

這時要用到隐式轉換規則,程式會去查找char型可隐式轉換成的最低級類型的play方法,若找到,就執行這個方法。

若找不到,程式會去查找char型可隐式轉換成的次低級類型的play方法,以此類推,直到找到比對的方法為止。

若到最後也沒有找到,程式會報錯。

PS:關于隐式轉換規則可以參看我的這篇博文

當我們調用test.play(2014)時,會調用play(int i)方法。

當我們調用test.play(2014.11)時,會調用play(double i)方法。

因為整型預設為int型,浮點型預設為double型。

2.2參數有多個時

以2個參數為例。 還是會用到隐式轉換準則,首先會查找兩個參數完美比對的方法。 若找不到,則會查找某一個參數完美比對,另一個參數按照參數隻有一個時的查找方法查找。 若還找不到,先将一個參數按照參數隻有一個時的查找方法查找,一個參數比對後再将另一個參數按照參數隻有一個時的查找方法查找,直到找到比對的方法為止。 若到最後也沒有找到,程式會報錯。

PS:參數查找時,兩個參數實際上是沒有先後順序差別的。 若查找到兩個方法,其中一個方法的第一個參數與調用方法的第一個參數比對度比另一個方法高,而第二個參數與調用方法的第二個參數比對度比另一個方法低。那麼這時會産生二義性,程式會報錯。 舉例:

public class OverTest {
	void play(float i,double j){
		System.out.println("調用了參數為(float,double)型的方法");
	}
	void play(double i,float j){
		System.out.println("調用了參數為(double,float)型的方法");
	}
	public static void main(String[] args) {
		OverTest test=new OverTest();
		test.play(2014,11);
	}

}