成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談Overload和Override的區(qū)別

開(kāi)發(fā) 后端
如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說(shuō)該方法被重寫 (Overriding)。如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。本文介紹的是Overload和Override的區(qū)別。

Overload是重載的意思,Override是覆蓋的意思,也就是重寫。

重載Overload表示同一個(gè)類中可以有多個(gè)名稱相同的方法,但這些方法的參數(shù)列表各不相同(即參數(shù)個(gè)數(shù)或類型不同)。

重寫Override表示子類中的方法可以與父類中的某個(gè)方法的名稱和參數(shù)完全相同,通過(guò)子類創(chuàng)建的實(shí)例對(duì)象調(diào)用這個(gè)方法時(shí),將調(diào)用子類中的定義方法,這相當(dāng)于把父類中定義的那個(gè)完全相同的方法給覆蓋了,這也是面向?qū)ο缶幊痰亩鄳B(tài)性的一種表現(xiàn)。

子類覆蓋父類的方法時(shí),只能比父類拋出更少的異常,或者是拋出父類拋出的異常的子異常,因?yàn)樽宇惪梢越鉀Q父類的一些問(wèn)題,不能比父類有更多的問(wèn)題。子類方法的訪問(wèn)權(quán)限只能比父類的更大,不能更小。如果父類的方法是private類型,那么,子類則不存在覆蓋的限制,相當(dāng)于子類中增加了一個(gè)全新的方法。

至于Overloaded的方法是否可以改變返回值的類型這個(gè)問(wèn)題,要看你倒底想問(wèn)什么呢?這個(gè)題目很模糊。如果幾個(gè)Overloaded的方法的參數(shù)列表不一樣,它們的返回者類型當(dāng)然也可以不一樣。

但我估計(jì)你想問(wèn)的問(wèn)題是:如果兩個(gè)方法的參數(shù)列表完全一樣,是否可以讓它們的返回值不同來(lái)實(shí)現(xiàn)重載Overload。這是不行的,我們可以用反證法來(lái)說(shuō)明這個(gè)問(wèn)題,因?yàn)槲覀冇袝r(shí)候調(diào)用一個(gè)方法時(shí)也可以不定義返回結(jié)果變量,即不要關(guān)心其返回結(jié)果,例如,我們調(diào)用map.remove(key)方法時(shí),雖然remove方法有返回值,但是我們通常都不會(huì)定義接收返回結(jié)果的變量,這時(shí)候假設(shè)該類中有兩個(gè)名稱和參數(shù)列表完全相同的方法,僅僅是返回類型不同,java就無(wú)法確定編程者倒底是想調(diào)用哪個(gè)方法了,因?yàn)樗鼰o(wú)法通過(guò)返回結(jié)果類型來(lái)判斷。

override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個(gè)方法并且對(duì)其重寫,以求達(dá)到不同的作用。對(duì)我們來(lái)說(shuō)最熟悉的覆蓋就是對(duì)接口方法的實(shí)現(xiàn),在接口中一般只是對(duì)方法進(jìn)行了聲明,而我們?cè)趯?shí)現(xiàn)時(shí),就需要實(shí)現(xiàn)接口聲明的所有方法。除了這個(gè)典型的用法以外,我們?cè)诶^承中也可能會(huì)在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點(diǎn):

1、覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,才能達(dá)到覆蓋的效果;

2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;

3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;

4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個(gè)方法,并沒(méi)有對(duì)其進(jìn)行覆蓋。

overload對(duì)我們來(lái)說(shuō)可能比較熟悉,可以翻譯為重載,它是指我們可以定義一些名稱相同的方法,通過(guò)定義不同的輸入?yún)?shù)來(lái)區(qū)分這些方法,然后再調(diào)用時(shí),VM就會(huì)根據(jù)不同的參數(shù)樣式,來(lái)選擇合適的方法執(zhí)行。在使用重載要注意以下的幾點(diǎn):

1、在使用重載時(shí)只能通過(guò)不同的參數(shù)樣式。例如,不同的參數(shù)類型,不同的參數(shù)個(gè)數(shù),不同的參數(shù)順序(當(dāng)然,同一方法內(nèi)的幾個(gè)參數(shù)類型必須不一樣,例如可以是fun(int,float),但是不能為fun(int,int));

2、不能通過(guò)訪問(wèn)權(quán)限、返回類型、拋出的異常進(jìn)行重載;

3、方法的異常類型和數(shù)目不會(huì)對(duì)重載造成影響;

4.對(duì)于繼承來(lái)說(shuō),如果某一方法在父類中是訪問(wèn)權(quán)限是priavte,那么就不能在子類對(duì)其進(jìn)行重載,如果定義的話,也只是定義了一個(gè)新方法,而不會(huì)達(dá)到重載的效果。

總之,重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。很重要的一點(diǎn)就是,Overloaded的方法是可以改變返回值的類型。希望對(duì)你有幫助。

原文地址:http://www.it315.org/programjava/70.htm

 

進(jìn)一步閱讀:C# override和overload經(jīng)驗(yàn)總結(jié)

【編輯推薦】

  1. JAVA技巧心得 學(xué)Java切忌浮躁
  2. 菜鳥(niǎo)入門 java語(yǔ)言學(xué)習(xí)六大要點(diǎn)
  3. JAVA虛擬機(jī)內(nèi)存分配與回收機(jī)制
  4. 淺談Java的volatile
  5. Javascript閉包(closure) 深入淺出
責(zé)任編輯:于鐵 來(lái)源: 程序員網(wǎng)校
相關(guān)推薦

2009-08-27 11:21:36

C# override

2011-05-13 15:23:37

聲明定義

2021-06-10 18:59:41

Java編程語(yǔ)言

2011-05-07 14:15:39

工作站PC

2009-08-28 15:28:22

C# overridenew隱藏

2011-04-21 15:26:46

噴墨打印

2009-08-27 10:54:09

C# const和st

2022-01-11 06:53:23

面試重寫重載

2009-06-18 15:45:55

J2ee筆試

2009-08-21 14:22:22

C# new和over

2011-06-28 10:55:20

C#接口抽象類

2009-08-26 14:54:23

C# new和over

2014-07-24 10:00:21

2013-01-08 15:11:19

OpenStackKVM

2013-09-11 09:49:18

Java數(shù)組集合

2010-05-13 17:00:50

Subversion安

2024-04-29 07:48:04

C++FinalOverride

2020-02-13 10:14:11

MySQL事務(wù)ACID

2009-07-17 17:49:39

JRuby學(xué)習(xí)

2011-03-25 10:25:30

同步方法同步代碼塊
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91久久电影 | 国产精品区二区三区日本 | 国产在线精品免费 | 国产91久久久久蜜臀青青天草二 | 久久综合影院 | 欧美a在线观看 | 国产精品小视频在线观看 | 日韩精品一区二区不卡 | 欧美二级 | 精品九九在线 | 欧美成人精品 | 不卡的av在线 | 特级黄一级播放 | www.久| 一区在线免费视频 | 人妖一区 | 国产区一区二区三区 | 欧美电影一区 | 综合色婷婷 | 日韩久久网 | 亚洲一区三区在线观看 | av一二三区| 91精品一区| 午夜国产一级 | 久久精品欧美一区二区三区不卡 | 国产美女永久免费无遮挡 | 成人免费视频在线观看 | 欧美video| 亚洲国产成人在线视频 | www.天堂av.com | 嫩草视频在线看 | 成人18亚洲xxoo | 日本黄色高清视频 | 日韩免费一区 | 天天人人精品 | 天天干天天玩天天操 | 欧美电影一区 | 亚洲一区二区在线播放 | 黄色片亚洲 | 99re热精品视频国产免费 | 欧美一区|