繼承性(inheritance)

  • 為描述和處理個(gè)人信息,定義類Person:


 class Person{
    public String name;
    public int age;
    public Date birthDate;
    public String getIofo() {
        ......
    }
}
  • 為描述和處理學(xué)生信息珊佣,定義類Student:


    image.png
class Student{
    public String name;
    public int age;
    public Date birthDate;
    public String school;
    public String getIofo() {
       //......
    }
}
  • 通過繼承归粉,簡(jiǎn)化Student類的定義:


    image.png
class Student extends Person{
     public String school;
}

Student類繼承了父類Person的所有屬性和方法电媳,并增加了一
個(gè)屬性school渐排。Person中的屬性和方法,Student都可以使用。

為什么要有繼承?
多個(gè)類中存在相同屬性和行為時(shí),將這些內(nèi)容抽取到單獨(dú)一個(gè)類中鲤脏,那么多個(gè)類無需再定義這些屬性和行為,只要繼承那個(gè)類即可亿蒸。即子類不是父類的子集凑兰,而是對(duì)父類的“擴(kuò)展”。

子類對(duì)象的創(chuàng)建
在類的聲明中边锁,可以通過使用關(guān)鍵字 extends 來顯式地指明其父類姑食。

語法格式如下:

[修飾符] class 子類名 extends 父類名 

● 修飾符:可選參數(shù),用于指定類的訪問權(quán)限茅坛,可選值為 public音半、abstract 和 final。
● 子類名:必選參數(shù)贡蓖,用于指定子類的名稱曹鸠。類名必須是合法的 Java 標(biāo)識(shí)符,在一般情況下斥铺,要求首字母大寫彻桃。
●extends 父類名:必選參數(shù),用于指定要定義的子類繼承于哪個(gè)父類晾蜘。

繼承的使用原則
子類可以繼承父類中所有可被子類訪問的成員變量和成員方法邻眷,但必須遵循以下原則。
(1)子類能夠繼承父類中被聲明為 public 和 protected 的成員變量和成員方法剔交,但不能繼承被聲明為 private 的成員變量和成員方法肆饶。

image.png

(2)子類能夠繼承在同一個(gè)包中的由默認(rèn)修飾符修飾的成員變量和成員方法。
(3)如果子類聲明了一個(gè)與父類的成員變量名稱相同的成員變量岖常,則子類不能繼承父類的成員變量驯镊。此時(shí)子類的成員變量隱藏了父類的成員變量。
(4)如果子類聲明了一個(gè)與父類的成員方法名稱相同的成員方法竭鞍,則子類不能繼承父類的成員方法板惑。此時(shí)子類的成員方法覆蓋了父類的成員方法。

【例 】 定義一個(gè)動(dòng)物類 Animal 及它的子類 Bird笼蛛。(1)創(chuàng)建一個(gè)名稱為 Animal 的類洒放,并在該類中聲明兩個(gè)成員變量 live 和兩個(gè)成員方法,分別為eat() 和 move()滨砍,具體代碼如下:

public class Animal{
   public boolean live = true;
   public String skin = "";
   public void eat(){
      Systeam.out.println("動(dòng)物需要吃食物");
   }
   public void move(){
     Systeam.out.println("動(dòng)物會(huì)運(yùn)動(dòng)");
   }
}

(2)創(chuàng)建一個(gè) Animal 類的子類 Bird,在該類中隱藏父類的成員變量 skin惋戏,并且覆蓋成員方法 move()领追,具體代碼如下:

public class Bird extends Animal{
    public String skin = "羽毛";
    public void move(){
        Systeam.out.println("鳥會(huì)飛翔");
   }
}

(3)創(chuàng)建一個(gè)名稱為 Zoo 的類,在該類的 main() 方法中創(chuàng)建子類Bird 的對(duì)象并為該對(duì)象分配內(nèi)存响逢,然后使該對(duì)象調(diào)用該類的成員方法及成員變量绒窑,具體代碼如下:

public class Zoo{
   public static void mian(String[] args){
      Bird bird = new Bird();
      bird.eat();
      bird.move();
      Systeam.out.println("鳥有:"+bird.skin);
   }
}

eat() 方法是從父類 Animal 繼承的方法,move() 方法是子類 Bird 聲明的覆蓋父類成員方法的成員方法舔亭,skin 變量是子類的成員變量些膨。

Java只支持單繼承和多層繼承,不允許多重繼承

  • 一個(gè)子類只能有一個(gè)父類
  • 一個(gè)父類可以派生出多個(gè)子類
  • class SubDemo extends Demo{ } //ok
  • class SubDemo extends Demo1,Demo2...//error


    image.png

子類的繼承
子類中的一部分成員是子類自己聲明和創(chuàng)建的钦铺,另一部分是通過它的父類繼承的订雾。在 Java 中,Object 類是所有類的祖先類矛洞,也就是說洼哎,任何類都繼承于 Object 類。除 Object 類以外的每個(gè)類沼本,有且僅有一個(gè)父類噩峦,而一個(gè)類可以有零個(gè)或多個(gè)子類。

1.同一包中的子類與父類
如果子類與父類在同一包中抽兆,則子類會(huì)繼承父類中非 private 修飾的成員變量和方法识补。

2.非同一包中的子類與父類
當(dāng)子類與父類不在同一包中時(shí),父類中使用 private 修飾的成員變量和友好的成員變量不會(huì)被繼承辫红,也就是說凭涂,子類只能繼承父類中使用 public 和 protected 修飾的成員變量作為子類的成員變量,同樣地厉熟,子類也只能繼承父類中使用 public 和 protected 修飾的成員方法作為子類的成員方法导盅。

3.繼承關(guān)系的 UML 圖
當(dāng)一個(gè)類是另一個(gè)類的子類時(shí),可以通過 UML 圖使用實(shí)線連接兩個(gè)類來表示二者之間的繼承關(guān)系揍瑟。實(shí)線的起始端是子類的 UML 圖白翻,實(shí)線的終止端是父類的 UML 圖。在實(shí)線的終止端使用一個(gè)空心三角形表示實(shí)線的結(jié)束绢片。

4.繼承中的 protected
在一個(gè) A 類中滤馍,它所定義的成員變量和方法都被 protected 所修飾。如果 A 類被 B 類底循、C 類繼承巢株,則在 B 類與 C 類中都繼承了 A 類的成員變量和方法。這時(shí)熙涤,如果在 C 類中創(chuàng)建一個(gè)自身的對(duì)象阁苞,則該對(duì)象可以訪問父類的和自身定義的 protected 修飾的成員變量和方法困檩。但是在其他類中,如 Student 類那槽,對(duì)于子類 C 自己聲明的 protected 修飾的成員變量和方法悼沿,只要 Student 類與 C 類在同一包中,創(chuàng)建的對(duì)象就可以訪問這些被 protected 修飾的成員變量和方法骚灸。對(duì)于子類 C 從父類中繼承的 protected 修飾的成員變量和方法糟趾,只要 Student 類與 C 類的父類在同一包中,創(chuàng)建的對(duì)象就能夠訪問繼承的 protected 修飾的成員變量和方法甚牲。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末义郑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子丈钙,更是在濱河造成了極大的恐慌非驮,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件著恩,死亡現(xiàn)場(chǎng)離奇詭異院尔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)喉誊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門邀摆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伍茄,你說我怎么就攤上這事栋盹。” “怎么了敷矫?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵例获,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我曹仗,道長(zhǎng)榨汤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任怎茫,我火速辦了婚禮收壕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轨蛤。我一直安慰自己蜜宪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布祥山。 她就那樣靜靜地躺著圃验,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缝呕。 梳的紋絲不亂的頭發(fā)上澳窑,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天斧散,我揣著相機(jī)與錄音,去河邊找鬼照捡。 笑死颅湘,一個(gè)胖子當(dāng)著我的面吹牛话侧,可吹牛的內(nèi)容都是我干的栗精。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瞻鹏,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼悲立!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起新博,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤薪夕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后赫悄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體原献,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年埂淮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姑隅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倔撞,死狀恐怖讲仰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情痪蝇,我是刑警寧澤鄙陡,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站躏啰,受9級(jí)特大地震影響趁矾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜给僵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一毫捣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧想际,春花似錦培漏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至侧甫,卻和暖如春珊佣,著一層夾襖步出監(jiān)牢的瞬間蹋宦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工咒锻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冷冗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓惑艇,卻偏偏與公主長(zhǎng)得像蒿辙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滨巴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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