[Java入門筆記] 面向對象三大特徵之:繼承

理解什麼是繼承

首先咱們知道,面對對象有三大特徵:安全

封裝:解決了數據的安全性問題學習

繼承:解決了代碼的重用問題spa

多態:解決了程序的擴展問題設計

上一篇博客中,咱們瞭解了一下封裝,如今我了再來看看什麼是繼承。對象

在現實生活中,咱們能夠把封裝理解成兒子對父親財產的繼承。而在面向對象程序設計中的繼承,是一個對象從另外一個對象獲取屬性和方法的過程。繼承

繼承是利用現有的類建立新類的過程,現有的類稱做基類(父類),建立的新類稱爲派生類(子類),派生類能夠擁有全部基類的非私有的屬性和方法。接口

例如,咱們能夠有一個類「人」,而咱們要建立一個新的類「學生」,學生也是屬於「人」的一種,有「人」這個類的一些共通屬性行爲,咱們就能夠把「學生」這個類繼承自「人」,而還有「小學生」、「中學生」、「大學生」,他們都屬於學生,咱們可讓他們繼承自「學生」類。博客

在繼承中,最高層的應該是最具備廣泛性的、最符合通常狀況的,往下一層,都應該比上一層更具體,在繼承中子類可以自動共享基類中的成員屬性和成員方法。程序設計

如何使用繼承

 在Java中,要繼承,須要使用extends關鍵字,繼承的語法格式以下:class

複製代碼

[訪問修飾符] class 子類名 extends 父類名 {
    成員列表
}

如

public Student extends Person{
    ......
}

複製代碼

 

例子:

按照上面的舉例,咱們先定義一個Person類

複製代碼

public class Person{
    public String name;
    public int age;

    public void sleep(){
        System.out.println("我正在睡覺");
    }

    public void eat(){
        System.out.println("我正在吃飯");
    }
}

複製代碼

 

對於「人」來講,人都有一個名字,都有年齡,可以睡覺,也能夠吃飯。

而我學若是此時須要有一個學生類,學生也屬與人,學生也都有人的特徵,此時咱們即可以使學生繼承於人。

複製代碼

public class Student extends Person{
    public String sid;  //學號
    public String cls;  //班級

    public void study(){
        System.out.println("我正在學習");
    }

}

複製代碼

 

對於學生來講,學生有本身的學號,有本身的班級,還有學習等等功能。

複製代碼

public class Test{
    public static void main(String[] args){
        Student stu = new Student();
        stu.name = "張三";
        stu.age = 20;  //咱們能夠爲Student類型的對象設置name和age,由於S圖等繼承自Person,因此也擁有Person類的屬性和方法。
        stu.sleep();
        stu.eat();  //咱們也可使用Person類的方法。

        stu.sid = "S20150101001";  //固然,咱們也可使用Student本身的屬性和方法
        stu.cls = "1001";
        stu.study();

        Person p = new Person();
        p.study();  //錯誤,父類不可使用子類的屬性和方法。
    }
}

複製代碼

 

 

固然,若是還須要有大學生等,咱們能夠定義大學生,使大學生繼承自學生類,大學生即可以擁有學生類和「人」類的屬性和方法。

須要注意的是,Java中的繼承是單繼承,也就是說,只能繼承一個父類,若是Student繼承了Person類,那就不能再直接繼承其餘的類。

繼承中的構造方法

須要注意的是,父類中的構造方法是不能被繼承的。

同時須要咱們注意的是,在對象的構建過程當中,會先構建出父類,在構建出子類,這個比較好理解,就想在現實生活中同樣,只有先有父親,然後纔有兒子同樣。

例如:

複製代碼

class ParentClass {  //定義父類
  public ParentClass() {  //構造方法
    System.out.println("這是父類的構造方法。");
  }
}

class ChildClass extends ParentClass {  //子類繼承於父類
  public ChildClass() {  //構造方法
    System.out.println("這是子類的構造方法。");
  }
}

public class ConstructorTest {  //該類用於容納main方法
  public static void main(String[] args) {
    ChildClass cc = new ChildClass();  //實例化子類對象
  }
}

複製代碼

執行輸出:

這是父類的構造方法。
這是子類的構造方法。

 所以:

  • 當實例化子類的對象時,必須先執行父類的構造方法,而後再執行子類的構造方法。
  • 若是父類還有更上級的父類,就會先調用最高父類的構造方法,再逐個依次地將全部繼承關係的父類構造方法所有執行。
  • 若是父類的構造方法執行失敗,那麼子類的對象也將沒法實例化。

super關鍵字

在Java中,用super關鍵字能夠對父類進行操做。

super主要有兩種用途:

第一種用途是:在子類的構造方法中,super關鍵字能夠顯式地調用父類的構造方法,用於將參數傳遞給它;

其語法是:super(參數);

須要注意的是:該條語句必須是構造方法中的第一條語句。

 

第二中用途是:若是子類中有和父類相同名字的成員,在子類中是默認使用子類中的成員的,可是咱們能夠super關鍵字顯式調用父類中的成員。

語法:super.成員名

須要注意的是:父類中該成員不是private的。

 

 Java中繼承的特色與繼承做用

特色

繼承是單向的,子類能夠訪問父類中的成員,但父類沒法訪問子類的成員。

Java中只容許單繼承,一個子類只能擁有一個父類。

 

做用

引入繼承,實現了代碼重用;

引入繼承,實現了遞增式的程序設計。

能減小代碼和數據的重複冗餘度,並經過加強一致性來減小模塊間的接口和界面,從而加強了程序的可維護性;

能清晰地體現出類與類之間的層次結構關係。

相關文章
相關標籤/搜索