到底是根據什么來區分類中多載的方法?
A:不同的回傳值型別, B:不同的引數型別, C:不同的訪問權限, D:不同的引數名稱,
決議:
Step1.我們先在DifferentiateReload類中創建一個無參無回傳值的say()方法
package components.javaTest.day1_20200822; /** * Question: * 區分類中多載方法的依據是什么? */ public class DifferentiateReload { public void say(){ System.out.println("A"); } }
Step2.試著在該類中構造回傳值不同的say()方法
public class DifferentiateReload { public void say(){ System.out.println("A"); } //新增回傳值不同的say()方法 public String say(){ return "B"; } }
? 此時我們可以看到編譯報錯了,編譯器認為已經存在了say()方法,
換言之,兩個方法無法被區分開來(我們可以想象一下,在呼叫該類的兩個方法new DifferentiateReload().say(),
此時根本不需要知道say()回傳的內容,系統也是腦殼疼不知道您是在呼叫哪一個,所以
A:不同的回傳值型別,--->無法區別類中的多載方法,
Step3.在該類中構造訪問權限不同的say()方法
package components.javaTest.day1_20200822; /** * Question: * 區分類中多載方法的依據是什么? */ public class DifferentiateReload { public void say(){ System.out.println("A"); } //新增權限不同的say()方法 private void say(){ System.out.println("C"); } }
? 同樣的,提示方法已經存在了,編譯報錯,
不同權限,無非是控制不同地方的呼叫,舉個例子,
如果都在DifferentiateReload類中呼叫,
那么public、private、protected對應呼叫者都是沒有區別,
系統還是無法得知你想呼叫的到底是哪個方法,所以
C:不同的訪問權限,--->無法區別類中的多載方法,
Step4.在該類中構造引數名稱不同的say()方法 在這里我們先后創建兩個有參,且引數型別都為int,同時引數名稱不同的say()
package components.javaTest.day1_20200822; /** * Question: * 區分類中多載方法的依據是什么? */ public class DifferentiateReload { public void say(int age) { System.out.println("I'm "+ age + "old."); } }package components.javaTest.day1_20200822; /** * Question: * 區分類中多載方法的依據是什么? */ public class DifferentiateReload { public void say(int age) { System.out.println("I'm "+ age + "old."); } //新增一個有參,且引數型別為int,同時引數名稱不同的say() public void say(int money) { System.out.println("I hava "+ money+ "yuan." ); } }

? 可以看到,編譯器在寫say(int money)方法的時候,認為say(int)方法已經存在了,
很顯然,對于編譯器,你傳一個int型別的年齡,和一個int型別的鈔票其實對它來說沒兩樣,
只要int型別的,我管你是什么含義,照收即可,也就是說,當你呼叫new DifferentiateReload(1)方法時,
編譯器也不知道你需要呼叫哪個方法,所以
D:不同的引數名稱,--->無法區別類中的多載方法,
Step5.在該類中構造引數型別不同say()方法
注意:引數型別不同可以有兩種理解:
一、在引數個數、引數所處位置順序相同的情況下,其對應的引數物件的型別不同
二、引數個數、引數所處位置的順序、引數的型別其中一個或者多個不同
不管是哪種理解,不同的引數型別,就能正確地區分類中的多載方法,下面控制臺列印出的就是呼叫多個say多載方法的輸出結果,
package components.javaTest.day1_20200822; /** * Question: * 區分類中多載方法的依據是什么? */ public class DifferentiateReload { public static void main(String[] args) { say(); say(11); say("11"); say(11, "11"); say("11", 11); } public static void say() { System.out.println("呼叫了無參無回傳值的say"); } public static void say(int count) { System.out.println("呼叫了引數為int無回傳值的say"); } public static void say(String msg) { System.out.println("呼叫了引數個數相同,型別不同,無回傳值的say"); } public static void say(int count, String msg) { System.out.println("呼叫了引數個數不同,型別不同,無回傳值的say"); } public static void say(String msg, int count) { System.out.println("呼叫了引數個數相同,型別相同,順序不同,無回傳值的say"); } }
所以區分類中多載方法的依據是:
B:不同的引數型別,
非 淡 泊 無 以 明 志
非 寧 靜 無 以 致 遠 !
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/47232.html
標籤:Java
上一篇:創建并啟動執行緒
