国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

覆蓋與重載的區別:相同點與異同點

2019-11-08 02:50:46
字體:
來源:轉載
供稿:網友

方法的重載(overload)和覆蓋(override)

 

有的時候,類的同一種功能有多種實現方式,到底采用哪種實現方式,取決于調用者給定的參數。例如我們最常用的System.out.PRintln()能夠打印出任何數據類型的數據,它有多種實現方式。運行時,java虛擬機先判斷給定參數的類型,然后決定執行哪個println()方法。

 

重載(overload):對于類的方法(包括從父類中繼承的方法),方法名相同,參數列表不同的方法之間就構成了重載關系。這里有兩個問題需要注意:

(1)       什么叫參數列表?參數列表又叫參數簽名,指三樣東西:參數的類型,參數的個數,參數的順序。這三者只要有一個不同就叫做參數列表不同。

(2)       重載關系只能發生在同一個類中嗎?非也。這時候你要深刻理解繼承,要知道一個子類所擁有的成員除了自己顯式寫出來的以外,還有父類遺傳下來的。所以子類中的某個方法和父類中繼承下來的方法也可以發生重載的關系。

大家在使用的時候要緊扣定義,看方法之間是否是重載關系,不用管方法的修飾符和返回類型以及拋出的異常,只看方法名和參數列表。而且要記住,構造器也可以重載。

 

覆蓋 (override):也叫重寫,就是在當父類中的某些方法不能滿足要求時,子類中改寫父類的方法。當父類中的方法被覆蓋了后,除非用super關鍵字,否則就無法再調用父類中的方法了。

發生覆蓋的條件:

1、“三同一不低” 子類和父類的方法名稱參數列表,返回類型必須完全相同,而且子類方法的訪問修飾符的權限不能比父類。

2、子類方法不能拋出比父類方法更多的異常。即子類方法所拋出的異常必須和父類方法所拋出的異常一致,或者是其子類,或者什么也不拋出;

3、被覆蓋的方法不能是final類型的。因為final修飾的方法是無法覆蓋的。

4、被覆蓋的方法不能為private。否則在其子類中只是新定義了一個方法,并沒有對其進行覆蓋。

5、被覆蓋的方法不能為static。所以如果父類中的方法為靜態的,而子類中的方法不是靜態的,但是兩個方法除了這一點外其他都滿足覆蓋條件,那么會發生編譯錯誤。反之亦然。即使父類和子類中的方法都是靜態的,并且滿足覆蓋條件,但是仍然不會發生覆蓋,因為靜態方法是在編譯的時候把靜態方法和類的引用類型進行匹配。

 

方法的覆蓋和重載具有以下相同點:

都要求方法同名

都可以用于抽象方法和非抽象方法之間

 

方法的覆蓋和重載具有以下不同點:

方法覆蓋要求參數列表(參數簽名)必須一致,而方法重載要求參數列表必須不一致。

方法覆蓋要求返回類型必須一致,方法重載對此沒有要求。

方法覆蓋只能用于子類覆蓋父類的方法,方法重載用于同一個類中的所有方法(包括從父類中繼承而來的方法)

方法覆蓋對方法的訪問權限和拋出的異常有特殊的要求,而方法重載在這方面沒有任何限制。

父類的一個方法只能被子類覆蓋一次,而一個方法可以在所有的類中可以被重載多次。

 

另外,對于屬性(成員變量)而言,是不能重載的,只能覆蓋。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汤原县| 瑞丽市| 大厂| 岑溪市| 合川市| 沿河| 青田县| 甘泉县| 霍山县| 扶余县| 石棉县| 贡山| 手机| 定日县| 弥渡县| 扶风县| 湘潭县| 上饶市| 光泽县| 江华| 宣恩县| 万全县| 揭东县| 日照市| 县级市| 兴海县| 新巴尔虎右旗| 赤城县| 广丰县| 克什克腾旗| 龙里县| 加查县| 洞口县| 仪征市| 阜城县| 台州市| 襄樊市| 揭西县| 庆云县| 乌拉特后旗| 永新县|