Java 重寫(xiě)(Override)與重載(Overload)總結(jié)

重寫(xiě)(Override)

重寫(xiě)是子類(lèi)對(duì)父類(lèi)的允許訪問(wèn)的方法的實(shí)現(xiàn)過(guò)程進(jìn)行重新編寫(xiě), 返回值和形參都不能改變拌阴。
重寫(xiě)的好處在于子類(lèi)可以根據(jù)需要绍绘,定義特定于自己的行為。 也就是說(shuō)子類(lèi)能夠根據(jù)需要實(shí)現(xiàn)父類(lèi)的方法皮官。

class Animal{
   public void move(){
      System.out.println("動(dòng)物可以移動(dòng)");
   }
}
 
class Dog extends Animal{
   public void move(){
      System.out.println("狗可以跑和走");
   }
}
 
public class TestDog{
   public static void main(String args[]){
      Animal a = new Animal(); // Animal 對(duì)象
      Animal b = new Dog(); // Dog 對(duì)象
 
      a.move();// 執(zhí)行 Animal 類(lèi)的方法
 
      b.move();//執(zhí)行 Dog 類(lèi)的方法
   }
}

// 編譯運(yùn)行
動(dòng)物可以移動(dòng)
狗可以跑和走

在上面的例子中可以看到脯倒,盡管b屬于Animal類(lèi)型,但是它運(yùn)行的是Dog類(lèi)的move方法捺氢。

思考以下代碼運(yùn)行結(jié)果
class Animal{
   public void move(){
      System.out.println("動(dòng)物可以移動(dòng)");
   }
}
 
class Dog extends Animal{
   public void move(){
      System.out.println("狗可以跑和走");
   }
   public void bark(){
      System.out.println("狗可以吠叫");
   }
}
 
public class TestDog{
   public static void main(String args[]){
      Animal a = new Animal(); // Animal 對(duì)象
      Animal b = new Dog(); // Dog 對(duì)象
 
      a.move();// 執(zhí)行 Animal 類(lèi)的方法
      b.move();//執(zhí)行 Dog 類(lèi)的方法
      b.bark();
   }
}

運(yùn)行結(jié)果

TestDog.java:30: cannot find symbol
symbol  : method bark()
location: class Animal
                b.bark();
                 ^

該程序?qū)伋鲆粋€(gè)編譯錯(cuò)誤藻丢,因?yàn)閎的引用類(lèi)型Animal沒(méi)有bark方法。

方法的重寫(xiě)規(guī)則

●參數(shù)列表必須完全與被重寫(xiě)方法的相同摄乒;
●返回類(lèi)型必須完全與被重寫(xiě)方法的返回類(lèi)型相同悠反;
●訪問(wèn)權(quán)限不能比父類(lèi)中被重寫(xiě)的方法的訪問(wèn)權(quán)限更低。例如:如果父類(lèi)的一個(gè)方法被聲明為public馍佑,那么在子類(lèi)中重寫(xiě)該方法就不能聲明為protected斋否。
●父類(lèi)的成員方法只能被它的子類(lèi)重寫(xiě)。
●聲明為final的方法不能被重寫(xiě)拭荤。
●聲明為static的方法不能被重寫(xiě)茵臭,但是能夠被再次聲明。
●子類(lèi)和父類(lèi)在同一個(gè)包中舅世,那么子類(lèi)可以重寫(xiě)父類(lèi)所有方法旦委,除了聲明為private和final的方法奇徒。
●子類(lèi)和父類(lèi)不在同一個(gè)包中,那么子類(lèi)只能夠重寫(xiě)父類(lèi)的聲明為public和protected的非final方法缨硝。
●重寫(xiě)的方法能夠拋出任何非強(qiáng)制異常摩钙,無(wú)論被重寫(xiě)的方法是否拋出異常。但是查辩,重寫(xiě)的方法不能拋出新的強(qiáng)制性異常胖笛,或者比被重寫(xiě)方法聲明的更廣泛的強(qiáng)制性異常,反之則可以宜岛。
●構(gòu)造方法不能被重寫(xiě)长踊。
●如果不能繼承一個(gè)方法,則不能重寫(xiě)這個(gè)方法谬返。

重載(Overload)

重載(overloading) 是在一個(gè)類(lèi)里面之斯,方法名字相同日杈,而參數(shù)不同遣铝。返回類(lèi)型可以相同也可以不同。

重載規(guī)則:

被重載的方法必須改變參數(shù)列表(參數(shù)個(gè)數(shù)或類(lèi)型不一樣)莉擒;
被重載的方法可以改變返回類(lèi)型酿炸;
被重載的方法可以改變?cè)L問(wèn)修飾符;
被重載的方法可以聲明新的或更廣的檢查異常涨冀;
方法能夠在同一個(gè)類(lèi)中或者在一個(gè)子類(lèi)中被重載填硕。
無(wú)法以返回值類(lèi)型作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)。

public class Overloading {
    public int test(){
        System.out.println("test1");
        return 1;
    }
 
    public void test(int a){
        System.out.println("test2");
    }   
 
    //以下兩個(gè)參數(shù)類(lèi)型順序不同
    public String test(int a,String s){
        System.out.println("test3");
        return "returntest3";
    }   
 
    public String test(String s,int a){
        System.out.println("test4");
        return "returntest4";
    }   
 
    public static void main(String[] args){
        Overloading o = new Overloading();
        System.out.println(o.test());
        o.test(1);
        System.out.println(o.test(1,"test3"));
        System.out.println(o.test("test4",1));
    }
}

總結(jié)

方法的重寫(xiě)(Overriding)和重載(Overloading)是java多態(tài)性的不同表現(xiàn)鹿鳖,重寫(xiě)是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現(xiàn)扁眯,重載可以理解成多態(tài)的具體表現(xiàn)形式。

(1)方法重載是一個(gè)類(lèi)中定義了多個(gè)方法名相同,而他們的參數(shù)的數(shù)量不同或數(shù)量相同而類(lèi)型和次序不同,則稱(chēng)為方法的重載(Overloading)翅帜。
(2)方法重寫(xiě)是在子類(lèi)存在方法與父類(lèi)的方法的名字相同,而且參數(shù)的個(gè)數(shù)與類(lèi)型一樣,返回值也一樣的方法,就稱(chēng)為重寫(xiě)(Overriding)姻檀。
(3)方法重載是一個(gè)類(lèi)的多態(tài)性表現(xiàn),而方法重寫(xiě)是子類(lèi)與父類(lèi)的一種多態(tài)性表現(xiàn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涝滴,一起剝皮案震驚了整個(gè)濱河市绣版,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌歼疮,老刑警劉巖杂抽,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異韩脏,居然都是意外死亡缩麸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)赡矢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)杭朱,“玉大人愚屁,你說(shuō)我怎么就攤上這事『勖剩” “怎么了霎槐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)梦谜。 經(jīng)常有香客問(wèn)我丘跌,道長(zhǎng),這世上最難降的妖魔是什么唁桩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任闭树,我火速辦了婚禮,結(jié)果婚禮上荒澡,老公的妹妹穿的比我還像新娘报辱。我一直安慰自己,他們只是感情好单山,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布碍现。 她就那樣靜靜地躺著,像睡著了一般米奸。 火紅的嫁衣襯著肌膚如雪昼接。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,793評(píng)論 1 314
  • 那天悴晰,我揣著相機(jī)與錄音慢睡,去河邊找鬼。 笑死铡溪,一個(gè)胖子當(dāng)著我的面吹牛漂辐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棕硫,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼髓涯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了饲帅?” 一聲冷哼從身側(cè)響起复凳,我...
    開(kāi)封第一講書(shū)人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灶泵,沒(méi)想到半個(gè)月后育八,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赦邻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年髓棋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡按声,死狀恐怖膳犹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情签则,我是刑警寧澤须床,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站渐裂,受9級(jí)特大地震影響豺旬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柒凉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一族阅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧膝捞,春花似錦坦刀、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至计盒,卻和暖如春渴频,著一層夾襖步出監(jiān)牢的瞬間芽丹,已是汗流浹背北启。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拔第,地道東北人咕村。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蚊俺,于是被迫代替她去往敵國(guó)和親懈涛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容