• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 知識大全 > 知識百科 > 百科知識 > 重寫和重載的區別_重寫和重載的不同之處(2)

    重寫和重載的區別_重寫和重載的不同之處(2)

    時間: 映芳735 分享

    重寫和重載的區別_重寫和重載的不同之處

      重寫和重載在規則上的區別

      重寫的規則

      1.參數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是重載。

      2.返回的類型必須一直與被重寫的方法的返回類型相同,否則不能稱其為重寫而是重載。

      3.訪問修飾符的限制一定要大于被重寫方法的訪問修飾符(public>protected>default>private)

      4.重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。

      例如:父類的一個方法申明了一個檢查異常IOException,在重寫這個方法是就不能拋出Exception,只能拋出IOException的子類異常,可以拋出非檢查異常。

      重載的規則

      1.必須具有不同的參數列表。

      2.可以有不同的返回類型,只要參數列表不同就可以了。

      3.可以有不同的訪問修飾符。

      4.可以拋出不同的異常。

      重載的編程語言

      重載是可使函數、運算符等處理不同類型數據或接受不同個數的參數的一種方法,關于重載一詞在詞義上有兩種不同的說法:

      多態

      重載是一種多態(如C++),有四種形式的多態:

      1.虛函數多態

      2模板多態

      3重載

      4轉換

      所謂的動態和靜態區分是另一種基于綁定時間的多態分類,嚴格來說,重載是編譯時多態,即靜態多態,根據不同類型函數編譯時會產生不同的名字如int_foo和char_foo等等,以此來區別調用。故重載仍符合多態定義——通過單一標識支持不同特定行為的能力,只是重載屬于靜態多態,而不是通過繼承和虛函數實現的動態多態。

      覆蓋

      重載(overload)和多態無關,真正和多態相關的是覆蓋(inheritance)。

      當派生類重新定義了基類的虛擬方法后,基類根據賦給它的不同的派生類引用,動態地調用屬于派生類的對應方法,這樣的方法調用在編譯期間是無法確定的。因此,這樣的方法地址是在運行期綁定的(動態綁定)。

      重載只是一種語言特性,是一種語法規則,與多態無關,與面向對象也無關。

      不過針對所謂的第二種重載,有一個專門的名詞--重寫或重定義。重載與重寫的區別就在于是否覆蓋,重寫一般多發生在不同的類且存在繼承關系之間,而重載多是在一個類里或者一塊代碼段里。

      特點:

      由于重載可以在同一個類中定義功能類似的函數,這給程序員管理類的相似函數提供了極大的方便。例如,在一個定義圓的類中,需要設定圓心和半徑來確定一個圓對象,程序員不需要設定setRadius(float r)和SetPoint(float x,float y)兩個不同名函數,而只需要設定一個CSetCicle函數名就夠了。在這個簡單的例子中重載并沒有明顯的優勢,可是當一個類中相似功能函數有幾十、上百個的時候,重載的優勢就顯現出來了,這時程序員不需要去記這么繁多的函數名,可以把更多的精力放在程序本身上。重載的方法只屬于子類。

      函數:

      1.函數名必須相同,返回值可以相同,也可以不同,但是特征標必須不同。是函數名來確定函數的不同,是特征標是函數可以重載。編譯器首先選在函數名,然后再根據特征標在眾多重載的函數中找到合適的。

      2.匹配函數時,編譯器將不區分類型引用和類型本身,也不區分const和非const變量。(小注:因為這些在定義和聲明時可能不同,但是在調用時都是一樣的,編譯器將無法區分)。但是值得注意的是,形參與const形參的等價性僅適于非引用形參。有const引用形參的函數與有非const引用形參的函數是不同的。類似的,如果函數帶有指向const類型的指針形參,則與帶有指向相同類型的非const對象的指針形參的函數不相同。

      3.名稱修飾(name decoration)。編譯器將根據原型中指定的形參對每個函數名進行加密。

      重定義:

      被重載的函數有不同版本,這些函數地位是一樣的,可以根據特征標的不同選擇不同的函數。被重定義的函數也有不同的版本,但是你不能隨意選擇,你只能選擇最新的版本,被重定義多發生在類之間的繼承里。

      4.函數會有那么多版本,那么編譯將選哪一個呢。當然,理想情況是,實參與形參的數據類型完全匹配,但是當不完全匹配時會怎樣呢?這就要牽扯到c++里復雜的類型轉換了。

      在重載及函數模板重載里,編譯器選擇函數,要經過以下三步,這個過程稱為重載解析。

      第一步:創建候選函數列表,其中包含有與被調函數名稱相同的函數與模板函數。

      第二步:使用候選函數列表創建可行函數列表。這些都是參數數目正確的函數。

      第三步:確定是否有最佳可行的函數。如果有,則使用。

      確定最佳函數,只考慮其特征標,而不考慮返回類型(也無從考慮,但是要是硬想辦法的話,也有,不過沒有必要為了不必要的性能而浪費資源)。確定最佳函數,匹配特征標要依次經過以下判斷:(1)完全匹配(常規函數優于模板;允許無關緊要的轉換)(2)提升匹配(如char和short自動轉換為int)(3)標準轉換(int轉換為char,long轉換為double)(4)用戶自定義的轉換(如類聲明中定義的轉換函數)。

      完全允許無關緊要的轉換,這些轉換包括引用,指針與實體之間,數組與指針之間,函數與函數指針之間,const與非const等等。

      其次還要注意還要注意匹配的優先級。1,指向非const數據的指針和引用優先于const的指針和引用參數匹配(這種優先級只有當指針或引用出現時產生)。2,非模板函數,優于模板函數,顯示具體化的模板將優于隱式具體化的模板,總之較具體的優先(注意,具體并不是由于顯隱決定的,術語“最具體”是指編譯器推斷使用哪種類型時執行的轉換最少)。

      重寫的基本內容

      通常,派生類繼承基類的方法,因此,在調用對象繼承方法的時候,調用和執行的是基類的實現.但是,有時需要對派生類中的繼承方法有不同的實現.

      例如,假設動物類存在"跑"的方法,從中派生出馬和狗,馬和狗的跑得形態是各不相同的,因此同樣方法需要兩種不同的實現,這就需要"重新編寫"基類中的方法.

      "重寫"基類方法就是修改它的實現或者說在派生類中重新編寫

      //java代碼

      //方法重寫

      public class Father {

      public void ovel(int i){

      /*do something...*/   }

      public String ovef(){

      /*do something...*/

      return "***";   }   }

      public class Sun extends Father{

      public void ovel(int i){

      /*do other something...*/   }

      public String ovef(){

      /*do other something...*/

      return "XXX";   }   }

      總結:重寫—   1、必須是在繼承里,   2、方法名、返回值類型、參數個數和參數類型 都必須相同   3、派生類重寫的方法的訪問權限不能低于基類的權限


    看了重寫和重載的區別還看:

    1.2017java筆試面試題及參考答案

    2.javaweb常見面試題及參考答案

    3.2016最新亞信聯創java面試題

    4.最新的java面試題目及參考答案

    5.C++基礎筆試題及答案

    537689 主站蜘蛛池模板: 免费观看成人毛片| 国产成人做受免费视频| 久久国产精品-国产精品| 美利坚永久精品视频在线观看| 夜夜夜夜猛噜噜噜噜噜试看| 亚洲av综合色区| 精品理论片一区二区三区| 国产精品第13页| 久久99精品久久久久久hb无码| 爱情岛讨论坛线路亚洲高品质| 国产成人亚洲精品无码青青草原| 一本一道久久综合久久| 欧美三级纯黄版| 午夜宅男在线永久免费观看网| 综合激情网五月| 性满足久久久久久久久| 亚洲一区二区三区免费视频| 精品国产三级a∨在线| 国产精品久久久久9999高清| 东方aⅴ免费观看久久av| 欧美亚洲另类热图| 午夜精品成人毛片| 亚洲天堂2016| 女主调教贱女m视频| 久久精品国产亚洲AV网站| 激情网站免费看| 国产亚洲av片在线观看播放| 88国产精品视频一区二区三区| 我和岳乱妇三级高清电影| 亚洲人成人无码网www国产| 精品久久无码中文字幕| 国产成人AV一区二区三区无码| 99在线精品免费视频| 日出水了特别黄的视频| 亚洲人成色7777在线观看不卡| 精品久久久久久无码中文字幕漫画 | 日本全彩翼漫画全彩无遮挡| 亚洲电影在线看| 精品福利一区二区三区| 国产成人a毛片在线| 99re6这里只有精品视频|