• <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>
  • 學(xué)習(xí)啦 > 生活課堂 > 生活小常識(shí) > 重寫(xiě)和重載的三點(diǎn)區(qū)別

    重寫(xiě)和重載的三點(diǎn)區(qū)別

    時(shí)間: 志峰887 分享

    重寫(xiě)和重載的三點(diǎn)區(qū)別

      重載(Overloading)和重寫(xiě)(Overriding)是Java中兩個(gè)比較重要的概念。但是對(duì)于新手來(lái)說(shuō)也比較容易混淆。下面是學(xué)習(xí)啦小編為大家準(zhǔn)備的重寫(xiě)和重載的區(qū)別,希望大家喜歡!

      重寫(xiě)和重載的區(qū)別一:定義

      重載

      簡(jiǎn)單說(shuō),就是函數(shù)或者方法有同樣的名稱(chēng),但是參數(shù)列表不相同的情形,這樣的同名不同參數(shù)的函數(shù)或者方法之間,互相稱(chēng)之為重載函數(shù)或者方法。

      重寫(xiě)

      重寫(xiě)指的是在Java的子類(lèi)與父類(lèi)中有兩個(gè)名稱(chēng)、參數(shù)列表都相同的方法的情況。由于他們具有相同的方法簽名,所以子類(lèi)中的新方法將覆蓋父類(lèi)中原有的方法。

      重寫(xiě)和重載的區(qū)別二:相關(guān)知識(shí)

      關(guān)于重載和重寫(xiě),你應(yīng)該知道以下幾點(diǎn):

      1、重載是一個(gè)編譯期概念、重寫(xiě)是一個(gè)運(yùn)行期間概念。

      2、重載遵循所謂“編譯期綁定”,即在編譯時(shí)根據(jù)參數(shù)變量的類(lèi)型判斷應(yīng)該調(diào)用哪個(gè)方法。

      3、重寫(xiě)遵循所謂“運(yùn)行期綁定”,即在運(yùn)行的時(shí)候,根據(jù)引用變量所指向的實(shí)際對(duì)象的類(lèi)型來(lái)調(diào)用方法

      4、因?yàn)樵诰幾g期已經(jīng)確定調(diào)用哪個(gè)方法,所以重載并不是多態(tài)。而重寫(xiě)是多態(tài)。重載只是一種語(yǔ)言特性,是一種語(yǔ)法規(guī)則,與多態(tài)無(wú)關(guān),與面向?qū)ο笠矡o(wú)關(guān)。(注:嚴(yán)格來(lái)說(shuō),重載是編譯時(shí)多態(tài),即靜態(tài)多態(tài)。但是,Java中提到的多態(tài),在不特別說(shuō)明的情況下都指動(dòng)態(tài)多態(tài))

      重寫(xiě)和重載的區(qū)別三:對(duì)比

      重寫(xiě)的例子

      下面是一個(gè)重寫(xiě)的例子,看完代碼之后不妨猜測(cè)一下輸出結(jié)果:

      class Dog{

      public void bark(){

      System.out.println("woof ");

      }

      }

      class Hound extends Dog{

      public void sniff(){

      System.out.println("sniff ");

      }

      public void bark(){

      System.out.println("bowl");

      }

      }

      public class OverridingTest{

      public static void main(String [] args){

      Dog dog = new Hound();

      dog.bark();

      }

      }

      輸出結(jié)果:

      bowl

      上面的例子中,dog對(duì)象被定義為Dog類(lèi)型。在編譯期,編譯器會(huì)檢查Dog類(lèi)中是否有可訪(fǎng)問(wèn)的bark()方法,只要其中包含bark()方法,那么就可以編譯通過(guò)。在運(yùn)行期,Hound對(duì)象被new出來(lái),并賦值給dog變量,這時(shí),JVM是明確的知道dog變量指向的其實(shí)是Hound對(duì)象的引用。所以,當(dāng)dog調(diào)用bark()方法的時(shí)候,就會(huì)調(diào)用Hound類(lèi)中定義的bark()方法。這就是所謂的動(dòng)態(tài)多態(tài)性。

      重寫(xiě)的條件

      參數(shù)列表必須完全與被重寫(xiě)方法的相同;

      返回類(lèi)型必須完全與被重寫(xiě)方法的返回類(lèi)型相同;

      訪(fǎng)問(wèn)級(jí)別的限制性一定不能比被重寫(xiě)方法的強(qiáng);

      訪(fǎng)問(wèn)級(jí)別的限制性可以比被重寫(xiě)方法的弱;

      重寫(xiě)方法一定不能拋出新的檢查異常或比被重寫(xiě)的方法聲明的檢查異常更廣泛的檢查異常

      重寫(xiě)的方法能夠拋出更少或更有限的異常(也就是說(shuō),被重寫(xiě)的方法聲明了異常,但重寫(xiě)的方法可以什么也不聲明)

      不能重寫(xiě)被標(biāo)示為final的方法;

      如果不能繼承一個(gè)方法,則不能重寫(xiě)這個(gè)方法。

      重載的例子

      class Dog{

      public void bark(){

      System.out.println("woof ");

      }

      //overloading method

      public void bark(int num){

      for(int i=0; i

      System.out.println("woof ");

      }

      }

      上面的代碼中,定義了兩個(gè)bark方法,一個(gè)是沒(méi)有參數(shù)的bark方法,另外一個(gè)是包含一個(gè)int類(lèi)型參數(shù)的bark方法。在編譯期,編譯期可以根據(jù)方法簽名(方法名和參數(shù)情況)情況確定哪個(gè)方法被調(diào)用。

      重載的條件

      被重載的方法必須改變參數(shù)列表;

      被重載的方法可以改變返回類(lèi)型;

      被重載的方法可以改變?cè)L問(wèn)修飾符;

      被重載的方法可以聲明新的或更廣的檢查異常;

      方法能夠在同一個(gè)類(lèi)中或者在一個(gè)子類(lèi)中被重載。

    1747560 主站蜘蛛池模板: 男女下面进入拍拍免费看 | 精品国产一区二区三区久久影院 | a级一级黄色片| 精品国产福利一区二区| 成年人视频网址| 国产99小视频| 东北少妇不戴套对白第一次| a破外女出血毛片| 男女一进一出抽搐免费视频| 女主调教贱女m视频| 你懂的视频在线播放| japanese性暴力| 漂亮女教师被浣肠| 国产美女精品久久久久久久免费 | 国产精品亚洲片在线观看不卡| 动漫做羞羞的视频免费观看| 久久毛片免费看一区二区三区| 99re热视频| 精品国产v无码大片在线看| 尤物yw午夜国产精品视频| 午夜三级三级三点在线| www.av片| 欧美黑人又大又粗XXXXX| 性欧美18一19sex性高清播放 | 九九精品视频在线| 高清国产一级毛片国语| 日本xxxx高清在线观看免费| 四虎成人精品无码永久在线| 一区二区三区欧美| 波多野结衣在线中文| 国产精品嫩草影院线路| 亚洲综合无码一区二区| 91手机看片国产永久免费| 男男车车的车车网站免费| 在线免费视频a| 亚洲中久无码永久在线观看同| 91精品久久久久久久99蜜桃| 欧美xxxxx在线观看| 国产人与禽zoz0性伦多活几年| 丰满上司的美乳| 视频在线免费观看资源|