子類默認繼承父類的屬性和方法,但不會繼承父類的構造器,而是在子類被實例化時會默認調用父類的空構造器。子類在創建的時候會調用自己的空構造器,並在空構造器會隱式調用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關鍵字+父類構造器中的參數。