2017.9.5學(xué)習(xí)小結(jié) - 類的封裝、繼承與多態(tài)4

回顧

四,深度認(rèn)識類的繼承

1.子類對象的實例化過程

2.super關(guān)鍵字的使用

3.限制子類的訪問

學(xué)習(xí)小結(jié)

五、覆寫

“覆寫(Override)”的概念與“重載(Overload)”有相似之處。

1.方法的覆寫

當(dāng)一個子類繼承一個父類,如果子類中的方法與父類中的方法的名稱、參數(shù)個數(shù)及類型且返回值類型等都完全一致時,就稱子類中的這個方法覆寫了父類中的方法。同理,屬性也可覆寫。

class Super{ //父類
返回值類型 方法名(參數(shù)列表){
  }
}
class Sub extends Super{ // 子類
返回值 方法名(參數(shù)列表) // 與父類的方法同名,覆寫父類中的方法
}

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2017年9月5日 下午10:27:03
 * @Description TODO 子類覆寫父類的實現(xiàn)
 */
public class P306_12_15 {
    public static void main(String[] args) {
        Student7 s = new Student7("Jack", 25, "HAUT");
        // 此時調(diào)用的是子類中的talk()方法
        System.out.println(s.talk());
    }
}

class Person18 {
    String name;
    int age;

    public String talk() {
        return "I am:" + this.name + ",I am " + this.age + " years old";
    }
}

class Student7 extends Person18 {
    String school;

    public Student7(String name, int age, String school) {
        // 分別為屬性賦值
        this.name = name; // super.name = name
        this.age = age; // super.age = age
        this.school = school;
    }

    // 此處覆寫Person中的talk()方法
    public String talk() {
        return "I am from " + this.school;
    }
}

運行結(jié)果:

運行結(jié)果1

如何調(diào)用已經(jīng)覆寫的父類的方法呢?

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2017年9月5日 下午10:27:03
 * @Description TODO super調(diào)用父類的方法
 */
public class P307_12_16 {
    public static void main(String[] args) {
        Student8 s = new Student8("Jack", 25, "HAUT");
        // 此時調(diào)用的是子類中的talk()方法
        System.out.println(s.talk());
    }
}

class Person19 {
    String name;
    int age;

    public String talk() {
        return "I am:" + this.name + ",I am " + this.age + " years old";
    }
}

class Student8 extends Person19 {
    String school;

    public Student8(String name, int age, String school) {
        // 分別為屬性賦值
        this.name = name; // super.name = name
        this.age = age; // super.age = age
        this.school = school;
    }

    // 此處覆寫Person中的talk()方法
    public String talk() {
        // 調(diào)用父類的talk()
        return super.talk() + "I am from " + this.school;
    }
}

運行結(jié)果:

運行結(jié)果2

覆寫注意事項:

①.覆寫的方法的返回值類型必須和被覆寫的方法的返回值類型一致;

②.被覆寫的方法(子類)不能為static;

③.被覆寫的方法不能擁有比父類更為嚴(yán)格的訪問控制權(quán)限。

訪問權(quán)限大小:

私有(private)<默認(rèn)(default)<公有(public)

2.屬性的覆寫

所謂的屬性覆蓋指的是子類定義了和父類之中名稱相同的屬性。

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2017年9月5日 下午10:59:08
 * @Description TODO 屬性(數(shù)據(jù)成員)的覆寫
 */
public class P309_12_17 {
    public static void main(String[] args) {
        ComputerBook cb = new ComputerBook(); // 實例化子類對象
        cb.print();
    }
}

class Book2 {
    String info = "Hello World.";
}

class ComputerBook extends Book2 {
    int info = 100; // 屬性名稱與父類相同

    public void print() {
        System.out.println(info);
        System.out.println(super.info);
    }
}

運行結(jié)果:

運行結(jié)果3

思考

每天進(jìn)步一點點,真的可以達(dá)到預(yù)期效果嗎,現(xiàn)在雖然還達(dá)不到每天,但我還是堅持著,有時間還是得堅持下去。還需要兩天,這章也可以搞定啦。


記于2017年9月5日夜

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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