天天看點

java之父類中的構造器是否能被子類繼承?

子類預設繼承父類的屬性和方法,但不會繼承父類的構造器,而是在子類被執行個體化時會預設調用父類的空構造器。子類在建立的時候會調用自己的空構造器,并在空構造器會隐式調用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關鍵字+父類構造器中的參數。