子類預設繼承父類的屬性和方法,但不會繼承父類的構造器,而是在子類被執行個體化時會預設調用父類的空構造器。子類在建立的時候會調用自己的空構造器,并在空構造器會隐式調用super(),即父類的空構造器。如果父類的構造器被重載,那麼子類中的構造器也必須初始化父類的構造器,否則會報編譯錯誤。當然,隻要父類中顯示定義了空構造器,子類中就不必初始化父類的構造器。例如:
父類Person.java
package myjava;
public class Person {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
public Person(String name) {
this.name = name;
}
}
複制
子類:Student.java
package myjava;
public class Student extends Person{
//這裡必須初始化父類重載後的構造方法,否則會報錯
public Student(String name) {
super(name);
}
}
複制
Test.java
package myjava;
public class Test {
public static void main(String[] args) {
Person p = new Person("tom");
Student stu = new Student("jack");
String personName = p.getName();
String studentName = stu.getName();
System.out.println(personName);
System.out.println(studentName);
}
複制
輸出:
tom
jack
說明:此時父類中沒有顯示定義空構造器,隻有一個重載了的構造器,在子類構造器中,必須初始化父類的構造器,即super關鍵字+父類構造器中的參數。