關(guān)于Java如何正確地實(shí)現(xiàn)方法重載詳解
一. 方法重載
1. 概念
所謂方法的重(chong)載(重復(fù)出現(xiàn)),就是指在一個(gè)類中可以有多個(gè)名稱相同但參數(shù)不同的方法, 不過方法重載與返回值的類型無關(guān)。在Java中,無論是普通方法,還是構(gòu)造方法,都可以進(jìn)行重載。我們在調(diào)用重載的方法時(shí),會(huì)根據(jù)傳遞的參數(shù)不同,來執(zhí)行不同的方法。
通過方法的重載,我們就可以把一系列功能相似,但參數(shù)不同的方法,用同一個(gè)方法名進(jìn)行定義。這樣就避免了出現(xiàn)繁多的方法名,如果我們每次新建一個(gè)方法,就取個(gè)新的方法名,就會(huì)降低程序的可讀性。使用同一個(gè)方法名稱,我們就很容易記住這些方法,使用起來就很方便靈活。
2. 要求
根據(jù)方法重載的概念可知,方法重載時(shí)有如下要求:
1. 同名不同參(參數(shù)類型、個(gè)數(shù)、順序);
2. 與返回值、訪問修飾符無關(guān)。
也就是說,方法重載時(shí),要求方法的名稱相同,但參數(shù)不同,只要參數(shù)的類型、個(gè)數(shù)、順序有一個(gè)地方不同即可。但方法的重載與返回值和使用的訪問修飾符沒有關(guān)系!
我們可以自己進(jìn)行重載方法的定義,當(dāng)然java源碼中也有大量的重載方法,比如我們常見的String類中就有,如下圖所示:
比如String字符串中就定義了多個(gè)indexOf()和lastIndexOf()重載方法,當(dāng)然也有其他的重載方法。這些方法名稱相同,但參數(shù)肯定不同,和返回值沒有關(guān)系!
說了這么多之后,接下來還是讓我們通過一些案例看看方法的重載怎么實(shí)現(xiàn)吧。
二. 代碼案例
1. 普通方法重載
接下來我們設(shè)計(jì)一個(gè)案例,用于比較兩個(gè)數(shù)字的大小。我們在比較兩個(gè)數(shù)值時(shí),數(shù)值的類型是不固定的,可能是兩個(gè)int類型的數(shù)值,也可能是兩個(gè)double類型的數(shù)值,也可能是兩個(gè)double、一個(gè)int類型的數(shù)值......在這種情況下,我們就可以使用方法的重載來實(shí)現(xiàn)數(shù)值之間的比較。具體實(shí)現(xiàn)代碼參考如下:
/** * @author */ public class Demo01 { public static void main(String[] args) { Demo01 demo=new Demo01(); int max01 = demo.max(10, 20); System.out.println("較大的整數(shù)是:"+max01); float max02 = demo.max(20.0f, 39.8f); System.out.println("較大的單精度數(shù)是:"+max02); double max03 = demo.max(22.88, 10.88); System.out.println("較大的雙精度數(shù)是:"+max03); double max04 = demo.max(44.88, 5); System.out.println("較大的雙精度數(shù)是:"+max04); } // 輸出較大的那個(gè)整數(shù) public int max(int a, int b) { // 采用三目運(yùn)算符進(jìn)行簡化判斷 return a >= b ? a : b; } // 輸出較大的那個(gè)單精度數(shù) public float max(float a, float b) { // 采用三目運(yùn)算符進(jìn)行簡化判斷 return a >= b ? a : b; } // 輸出較大的那個(gè)單精度數(shù) public double max(double a, double b) { // 采用三目運(yùn)算符進(jìn)行簡化判斷 return a >= b ? a : b; } //定義一個(gè)私有的方法,該方法的兩個(gè)參數(shù)類型不同,這同樣也屬于方法重載。 private double max(double a, int b) { // 采用三目運(yùn)算符進(jìn)行簡化判斷 return a >= b ? a : b; } }
以上代碼,編譯、運(yùn)行都是完全沒問題的。雖然3個(gè)max()方法名稱相同,但它們的形參列表不同,所以系統(tǒng)可以正常區(qū)分出這3個(gè)方法。在運(yùn)行時(shí),Java虛擬機(jī)會(huì)根據(jù)傳遞過來的不同參數(shù)來調(diào)用不同的方法。
2. 構(gòu)造方法重載
除了普通方法可以重載之外,構(gòu)造方法也可以重載。但是我們要注意,構(gòu)造方法沒有返回值。
/** * @author */ public class Car { // 汽車品牌 public String logo; // 汽車顏色 private String color; // 汽車價(jià)格 private double price; // 無參構(gòu)造方法 public Car() { System.out.println("汽車類..."); } // 有參構(gòu)造方法 public Car(String logo) { System.out.println("汽車類...logo=" + logo); } // 有參構(gòu)造方法 public Car(String logo, String color) { System.out.println("汽車類...logo=" + logo + ",color=" + color); } // 有參構(gòu)造方法 public Car(String logo, String color, double price) { System.out.println("汽車類...logo=" + logo + ",color=" + color + ",price=" + price); } }
我們在構(gòu)造Car汽車類對象時(shí),可以如下所示:
public class Demo02 { public static void main(String[] args) { Car car1 = new Car(); Car car2 = new Car("奧迪A6"); Car car3 = new Car("奧迪A6", "黑色"); Car car4 = new Car("奧迪A6", "黑色", 50.0); } }
這樣通過傳入不同的參數(shù),就可以構(gòu)造出不同的汽車對象。
三. 結(jié)語
至此,就把方法重載相關(guān)的內(nèi)容講解完畢了,現(xiàn)在你知道哪些情況屬于方法重載了嗎?方法重載要點(diǎn)如下:
- 方法重載是指同一類中有多個(gè)方法的名稱相同,但參數(shù)不同;
- 重載的方法功能都類似,比如 String 的 indexOf()方法 ;
- 重載方法的返回值類型盡量要相同。
以上就是關(guān)于Java如何正確地實(shí)現(xiàn)方法重載詳解的詳細(xì)內(nèi)容,更多關(guān)于Java方法重載的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決mysql字符串類型的數(shù)字排序出錯(cuò):cast(year as signed)
這篇文章主要介紹了解決mysql字符串類型的數(shù)字排序出錯(cuò)問題 :cast(year as signed),如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Springboot定時(shí)任務(wù)Scheduled重復(fù)執(zhí)行操作
這篇文章主要介紹了Springboot定時(shí)任務(wù)Scheduled重復(fù)執(zhí)行操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09