08.第十一章:繼承和多態(tài)(1)

1. 面向?qū)ο蟮木幊淘试S你從已經(jīng)存在的類中定義新的類 诅病, 這稱為繼承费就。
2. 繼承使得你可以定義一個(gè)通用的類 ( 即父類 ) 晰洒, 之后擴(kuò)充該類為一個(gè)更加特定的類 ( 即子類 ) 蕾额。
3. super關(guān)鍵字
  • 調(diào)用父類的構(gòu)造方法
    構(gòu)造方法用于構(gòu)建一個(gè)類的實(shí)例 野建。 不同于屬性和普通方法 娜谊, 父類的構(gòu)造方法不會(huì)被子類繼承 确买。 它們只能使用關(guān)鍵字 super 從子類的構(gòu)造方法中調(diào)用 。
    super () 或者 super ( parameters )
    • 構(gòu)造方法鏈
      • 構(gòu)造方法可以調(diào)用重載的構(gòu)造方法或父類的構(gòu)造方法 纱皆。 如果它們都沒有被顯式地調(diào)用 湾趾,編譯器就會(huì)自動(dòng)地將 superO 作為構(gòu)造方法的第一條語句 。
      • 在任何情況下 派草, 構(gòu)造一個(gè)類的實(shí)例時(shí) 搀缠, 將會(huì)調(diào)用沿著繼承鏈的所有父類的構(gòu)造方法 。 當(dāng)構(gòu)造一個(gè)子類的對(duì)象時(shí) 近迁, 子類構(gòu)造方法會(huì)在完成自己的任務(wù)之前 艺普, 首先調(diào)用它的父類的構(gòu)造方法 。 如果父類繼承自其他類 鉴竭, 那么父類構(gòu)造方法又會(huì)在完成自己的任務(wù)之前 歧譬, 調(diào)用它自己的父類的構(gòu)造方法 。 這個(gè)過程持續(xù)到沿著這個(gè)繼承體系結(jié)構(gòu)的最后一個(gè)構(gòu)造方法被調(diào)用為止搏存。這就是構(gòu)造方法鏈 ( constructor chaining ) 缴罗。
  • 調(diào)用父類的方法 super . 方法名 ( 參數(shù) )
4.方法的重寫

子類從父類中繼承方法 。 有時(shí) 祭埂, 子類需要修改父類中定義的方法的實(shí)現(xiàn) 面氓, 這稱作方法重寫 ( method overriding ) 兵钮。
注意:

  • 僅當(dāng)實(shí)例方法是可訪問時(shí) , 它才能被覆蓋 舌界。 因?yàn)樗接蟹椒ㄔ谒念惐旧硪酝馐遣荒茉L問的 掘譬, 所以它不能被覆蓋 。 如果子類中定義的方法在父類中是私有的 呻拌, 那么這兩個(gè)方法完全沒有關(guān)系葱轩。
  • 與實(shí)例方法一樣 , 靜態(tài)方法也能被繼承 藐握。 但是 靴拱, 靜態(tài)方法不能被重寫。
  • 方法重寫具有同樣的簽名和返回值類型 猾普; 方法重載具有同樣的名字 袜炕, 但是不同的參數(shù)列表 。
5.多態(tài)
  • 使用父類對(duì)象的地方都可以使用子類的對(duì)象 ,這就是通常所說的多態(tài)初家。簡(jiǎn)單來說 , 多態(tài)意味著父類型的
    變量可以引用子類型的對(duì)象 溜在。
  • 動(dòng)態(tài)綁定
Object o = new CeometricObject () ;
System . out . println ( o . toString ( ) );

聲明類型:一個(gè)變量必須被聲明為某種類型 陌知。 變量的這個(gè)類型稱為它的聲明類型 。 這里 掖肋, o 的聲明類型是 Object 仆葡。
實(shí)際類型:被變量引用的對(duì)象的實(shí)際類。 這里 志笼, o 的實(shí)際類型是 GeometricObject , 因?yàn)?o 指向使用 new GeometricObject()創(chuàng)建的對(duì)象浙芙。
o 調(diào)用哪個(gè)toString()方法由 o 的實(shí)際類型決定,這稱為動(dòng)態(tài)綁定籽腕。

6.示例:
  • 方法的重寫(僅當(dāng)實(shí)例方法是可訪問時(shí) , 它才能被覆蓋 纸俭,否則是完全不同的兩個(gè)方法)
public class Test1 {
    public static void main(String[] args) {
        new Personl().printPerson();
        new Student().printPerson();
    }
}
    class Student extends Personl {
    //因?yàn)槁暶鞯氖莗rivate皇耗,所以子類的方法與父類的同名方法毫無關(guān)系
    //沒有重寫父類的方法
        private String getlnfo(){
            return "Student";
        }
    }

     class Personl {
         private String getlnfo() {
             return "Person";
         }
         //父類調(diào)用父類的getInfo()方法
         public void printPerson() {
             System . out . println (getlnfo()) ;
         }
     }

結(jié)果為Person Person

public class Test1 {
    public static void main(String[] args) {
        new Personl().printPerson();
        new Student().printPerson();
    }
}
    class Student extends Personl {
     //聲明為public,子類重寫了父類的方法揍很,在子類對(duì)象調(diào)用時(shí)郎楼,會(huì)使用重寫的方法
        public String getlnfo(){
            return "Student";
        }
    }

     class Personl {
         public String getlnfo() {
             return "Person";
         }
         //父類調(diào)用父類的getInfo()方法,但如果是子類對(duì)象調(diào)用窒悔,父類的getInfo方法已經(jīng)被重寫
         public void printPerson() {
             System . out . println (getlnfo()) ;
         }
     }

結(jié)果 Person Student

  • 創(chuàng)建一個(gè)對(duì)象時(shí) 構(gòu)造函數(shù)的運(yùn)行過程:先調(diào)用父類的構(gòu)造函數(shù)呜袁,再調(diào)用子類的構(gòu)造函數(shù)
ackage java_04_基礎(chǔ)習(xí)題練習(xí).第11章_繼承和多態(tài);

/**
 *
 */
public class Test2_構(gòu)造函數(shù)執(zhí)行順序 {
    public static void main(String[] args){
        A a=new A(3);
    }
}
class A extends B{
    public A(int t){
        System.out.println("A's constructor is invoked");
    }

}
class B{
    public B(){
        System.out.println("B's constructor is invoked");
    }
}
public class Test3 {
    public static void main(String[] args){
        //直接調(diào)用A1的構(gòu)造函數(shù),i=40
        new A1();
        //1.B1繼承自A1简珠,先去執(zhí)行A1阶界,給i賦值i=7虹钮;
        //2.調(diào)用A1的構(gòu)造函數(shù),由于setI()方法被子類重寫膘融,所以此時(shí)調(diào)用的是子類的setI()方法芙粱,i=60
        //3.i from A is 60
        //4.調(diào)用B1的構(gòu)造函數(shù),i在A1中已經(jīng)被賦值60氧映,所以i from B is 60
        new B1();
    }
}

class A1{
    int i=7;
    public A1(){
        setI(20);
        System.out.println("i from A is "+i);
    }

    public void setI(int i){
        this.i=2*i;
    }
}

class B1 extends A1{
    public B1(){
        System.out.println("i from B is "+i);
    }
    public void setI(int i){
        this.i=3*i;
    }
}
  • instanceof:
    在嘗試轉(zhuǎn)換之前確保該對(duì)象是另一個(gè)對(duì)象的實(shí)例,可以利用運(yùn)算符 instanceof來實(shí)現(xiàn)春畔。
    警告 : 對(duì)象成員訪問運(yùn)算符 ( . ) 優(yōu)先于類型轉(zhuǎn)換運(yùn)算符 。 使用圓括號(hào)保證在點(diǎn)運(yùn)算符 ( ? )
    之前進(jìn)行轉(zhuǎn)換 岛都, 例如 :( ( Circle) object ) . getArea();
7.Object 類的 equals 方法

Object類中方法的默認(rèn)實(shí)現(xiàn):

//這個(gè)實(shí)現(xiàn)使用 == 運(yùn)算符檢測(cè)兩個(gè)引用變量是否指向同一個(gè)對(duì)象律姨。
//因此 , 應(yīng)該在自己的客戶類中重寫這個(gè)方法 臼疫, 以測(cè)試兩個(gè)不同的對(duì)象是否具有相同的內(nèi)容 择份。
public boolean equals ( Object o ){
   return(this==obj);
}

調(diào)用語法:object1. equals ( object2 ) ;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市多矮,隨后出現(xiàn)的幾起案子缓淹,更是在濱河造成了極大的恐慌,老刑警劉巖塔逃,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讯壶,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡湾盗,警方通過查閱死者的電腦和手機(jī)伏蚊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來格粪,“玉大人躏吊,你說我怎么就攤上這事≌饰” “怎么了比伏?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疆导。 經(jīng)常有香客問我赁项,道長,這世上最難降的妖魔是什么澈段? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任悠菜,我火速辦了婚禮,結(jié)果婚禮上败富,老公的妹妹穿的比我還像新娘悔醋。我一直安慰自己,他們只是感情好兽叮,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布芬骄。 她就那樣靜靜地躺著猾愿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪德玫。 梳的紋絲不亂的頭發(fā)上匪蟀,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音宰僧,去河邊找鬼材彪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛琴儿,可吹牛的內(nèi)容都是我干的段化。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼造成,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼显熏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晒屎,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤喘蟆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鼓鲁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕴轨,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年骇吭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了橙弱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡燥狰,死狀恐怖棘脐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情龙致,我是刑警寧澤蛀缝,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站目代,受9級(jí)特大地震影響屈梁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜像啼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潭苞。 院中可真熱鬧忽冻,春花似錦、人聲如沸此疹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至湖笨,卻和暖如春旗扑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慈省。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國打工臀防, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人边败。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓袱衷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笑窜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子致燥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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