我在上海樂字節學Java的第十三天

類的繼承
爲描述和處理我的信息,定義類Person:this

public class Person {
      public String name;
      public int age;
      public Date birthDate;
      public String getInfo() {
            ...
      }
}

爲描述和處理學生信息,定義類Student:code

public class Student {
      public String name;
      public int age;
      public Date birthDate;
      public String school;
      public String getInfo(){
            ...
      }
}

經過繼承,簡化Student類的定義:對象

public class Person {
      public String name;
      public int age;
      public Date birthDate;
      public String getInfo() {...}
}

public class Student extends Person{
      public String school;
}

Student類繼承了父類Person的全部屬性和方法,並增長了一個屬性school。Person中的屬性和方法,Student均可以使用。
類的繼承
Java只支持單繼承,不容許多重繼承
一個子類只能有一個父類
一個父類能夠派生出多個子類
子類繼承了父類,就繼承了父類的方法和屬性。
在子類中,能夠使用父類中定義的方法和屬性,也能夠建立新的屬性和方法。同時能夠重寫父類的方法
於是,子類一般比父類的功能更多。
在Java 中,繼承的關鍵字用的是「extends」,即子類是對父類的「擴展」。
注意:全部類的基類都是Object
四種訪問權限修飾符
super關鍵字
在Java類中使用super關鍵字來引用父類的成分
super可用於訪問父類中定義的屬性
super可用於調用父類中定義的成員方法
super可用於在子類構造方法中調用父類的構造方法繼承

public class Person {
    private String name;
    private int age;
    public String getInfo() {
        return "Name: " + name + "\nage: " + age;
    }
}

public class Student extends Person {
    private String school = "New Oriental";
    public String getSchool(){ 
        return school; 
    }
    public String getInfo() {
        // 調用父類的方法
        return super.getInfo() +"\nschool: " +school;
    }
}

父類構造方法的調用
子類繼承父類全部的成員變量和成員方法,但不繼承父類的構造方法
在子類的構造方法中可以使用super(參數列表)形式的語句調用父類的構造方法
若是子類的構造方法中沒有顯示地調用父類構造方法,也沒有使用this關鍵字調用重載的其它構造方法,則系統默認調用父類無參數的構造方法
若是子類構造方法中既未顯式調用父類構造方法,而父類中又沒有無參的構造方法,則編譯出錯get

public class Person {
    private String name;
    private int age;
    private Date birthDate;    
    public Person(String name, int age, Date d) {
        this.name = name;
        this.age = age;
        this.birthDate = d;
    }
    public Person(String name, int age) {
        this(name, age, null);
    }
    public Person(String name, Date d) {
        this(name, 30, d);
    }
    public Person(String name) {
        this(name, 30);
    }
    // ……

子類對象實例化全過程編譯

相關文章
相關標籤/搜索