類的繼承
爲描述和處理我的信息,定義類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); } // ……
子類對象實例化全過程編譯