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關鍵字+父類構造器中的參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM