編程知識 | Java Override & Overload

編程知識.png

1. Overide尺碰,重寫

重寫一般是發(fā)生在子類繼承父類后记餐,某些父類方法不適應(yīng)子類的需求,而此時(shí)子類就重寫相同的方法粗恢,更加自己的需求柑晒,定義自己特定的行為。

簡單列子
public class Person {
    String name;
    int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void say() {
        System.out.print("my name is "+name+"," + age + " years old this year");
    }
}
public class Teacher extends Person{

    public Teacher(String name, int age) {
        super(name, age);
    }

    @Override
    public void say() {
        System.out.print("my name is " + super.name+"," + age + " years old this year," + "i'm a teacher");
    }
}

子類Teacher繼承父類Person眷射,并重寫了say匙赞,重寫的時(shí)候,編譯器會幫你添加注解:override凭迹。

1.1 輸入?yún)?shù)寬度

重載對輸入?yún)?shù)的寬度有限制罚屋,要求其必須等于父類的寬帶。對于上面的例子嗅绸,對Person增加一個(gè)方法:

/**
 * 一下子吃超級多的東西
 *  鍵值對:
 *      key - 食物名稱
 *      value - 食物數(shù)量
 * @param map map
 */
public void eat(Map<String, ? extends Integer> map) {
    Iterator<String> iterator = map.keySet().iterator();
    while (iterator.hasNext()) {
        String key = iterator.next();
        System.out.println("eat " + key + ", " + map.get(key));
    }
}

當(dāng)我們嘗試子類重載方法脾猛,并使其輸入?yún)?shù)小于父類的輸出參數(shù)(HashMap是Map的一個(gè)子集),編譯器提示報(bào)錯(cuò)

Snipaste_2018-11-09_10-29-01.png

若此時(shí)我們把Override去掉會發(fā)生什么鱼鸠?編譯通過猛拴,但當(dāng)傳入Map的對象時(shí)候羹铅,會直接調(diào)用父類方法,而當(dāng)傳入HashMap對象的時(shí)候愉昆,編譯器報(bào)錯(cuò)职员,提示,子類和父類皆有同名方法而參數(shù)類型也符合要球跛溉。當(dāng)我們把子類的方法改改:

    public void eat(int a) {
        System.out.print("Teacher, eat");
    }

是可以成功焊切,且成功調(diào)用。

1.2 拋出異常寬度

重載對異常的拋出寬度有限制嗎芳室?還是同一個(gè)方法专肪,父類定義:

/**
 * 一下子吃超級多的東西
 *  鍵值對:
 *      key - 食物名稱
 *      value - 食物數(shù)量
 * @param map map
 */
public void eat(Map<String, ? extends Integer> map) throws IOException{
    Iterator<String> iterator = map.keySet().iterator();
    while (iterator.hasNext()) {
        String key = iterator.next();
        System.out.println("eat " + key + ", " + map.get(key));
    }
}

拋出一個(gè)異常IOException,如果子類重載堪侯,拋出大于父類的異常Exception

Snipaste_2018-11-09_10-42-36.png

編譯器報(bào)錯(cuò)嚎尤。那如果寬度小于父類的異常呢?

public class MyIOException extends IOException{
//定義一個(gè)繼承IOException的異常
}
@Override
public void eat(Map<String, ? extends Integer> map) throws MyIOException {
    try {
        super.eat(map);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

或者刪除異常

@Override
public void eat(Map<String, ? extends Integer> map) {
    try {
        super.eat(map);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

編譯伍宦,運(yùn)行成功芽死。不過如果想要調(diào)用super.eat(map),因?yàn)槠溆袙伋龅漠惓4瓮荩覍挾却笥谧宇惙椒ǖ?code>MyIOException关贵,所以需要先捕抓異常。

1.3 返回類型

跟輸入類型一樣滓玖,必須一致坪哄,不能修改。

1.4 方法訪問權(quán)限

一定不能做更嚴(yán)格的限制(可以降低限制)势篡,假如父類的方法聲明為protected翩肌,則,子類可以重載其為public但不能為private禁悠。

2. Overload念祭,重載

重載發(fā)生在同一個(gè)類里面,名字相同碍侦,但是參數(shù)一定不同粱坤,返回值類型可以相同也可以不同。最常用到的是構(gòu)造函數(shù)瓷产。來看一些例子:

//1
protected void eat(Map<String, ? extends Integer> map) throws IOException{
    System.out.println("eat Map");
}
//2
public void eat(HashMap map) {
    System.out.println("eat HashMap");
}
//3
public void eat() {
    System.out.println("eat null");
}
//4
public boolean eat(int a) {
    System.out.println("eat a");
    return true;
}
  • 方法的參數(shù)一定要不同站玄,在次前提下,其他的隨意
  • 方法返回值可以隨意變化
  • 方法的拋出異常也是
  • 方法的訪問權(quán)限也是

3. 總結(jié)

參考

20171102-1.jpg
區(qū)別點(diǎn) 重寫(Override) 重載(Overload)
參數(shù) 一定不能修改 必須不同
返回值 一定不能修改 隨意
拋出的異常 可以減少濒旦,刪除株旷,不能拋出寬度更大的異常 隨意
訪問權(quán)限 不能做更嚴(yán)格的限制 隨意
  • 方法重載是一個(gè)類中定義了多個(gè)方法名相同,而他們的參數(shù)的數(shù)量不同或數(shù)量相同而類型和次序不同,則稱為方法的重載(Overloading)。

  • 方法重寫是在子類存在方法與父類的方法的名字相同,而且參數(shù)的個(gè)數(shù)與類型一樣,返回值也一樣的方法,就稱為重寫(Overriding)。

  • 方法重載是一個(gè)類的多態(tài)性表現(xiàn),而方法重寫是子類與父類的一種多態(tài)性表現(xiàn)晾剖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锉矢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子齿尽,更是在濱河造成了極大的恐慌沽损,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件循头,死亡現(xiàn)場離奇詭異绵估,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贷岸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門壹士,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磷雇,“玉大人偿警,你說我怎么就攤上這事∥希” “怎么了螟蒸?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長崩掘。 經(jīng)常有香客問我七嫌,道長,這世上最難降的妖魔是什么苞慢? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任诵原,我火速辦了婚禮,結(jié)果婚禮上挽放,老公的妹妹穿的比我還像新娘绍赛。我一直安慰自己,他們只是感情好辑畦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布吗蚌。 她就那樣靜靜地躺著,像睡著了一般纯出。 火紅的嫁衣襯著肌膚如雪蚯妇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天暂筝,我揣著相機(jī)與錄音箩言,去河邊找鬼。 笑死焕襟,一個(gè)胖子當(dāng)著我的面吹牛陨收,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胧洒,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼畏吓,長吁一口氣:“原來是場噩夢啊……” “哼墨状!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起菲饼,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤肾砂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后宏悦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镐确,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年饼煞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了源葫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砖瞧,死狀恐怖息堂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情块促,我是刑警寧澤荣堰,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站竭翠,受9級特大地震影響振坚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斋扰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一渡八、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧传货,春花似錦屎鳍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至僻澎,卻和暖如春貌踏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窟勃。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工祖乳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秉氧。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓眷昆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子亚斋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

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

  • 一作媚、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)...
    子非魚_t_閱讀 4,154評論 1 44
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法帅刊,內(nèi)部類的語法纸泡,繼承相關(guān)的語法,異常的語法赖瞒,線程的語...
    子非魚_t_閱讀 31,587評論 18 399
  • 我們生活中遇到的所有事情基本可以分為三類女揭,第一類純粹由隨機(jī)性決定,比如布朗運(yùn)動(dòng)和輪盤賭博栏饮,第二類純粹由能力決定吧兔,比...
    素履無涯閱讀 320評論 0 4
  • 培訓(xùn)前思考兩個(gè)問題:今天參加培訓(xùn)的目的是啥?結(jié)束后要做一個(gè)怎樣的銀行家袍嬉? 以下內(nèi)容均是課程重點(diǎn)摘要境蔼。 先熟悉游戲,...
    一粒粒007閱讀 317評論 2 5
  • 一 我的高二男生,一個(gè)富而知禮的文弱男孩拼苍,酒后哭著給我打電話:老師笑诅,我實(shí)在活不下去了,我要把她砍死疮鲫。掛了電話吆你,我立...
    關(guān)念閱讀 3,218評論 34 72