子父類中的構造函數

子父類構造函數函數


*在對子類的構造函數進行初始化時,對父類的構造函數也會運行
那是由於子類構造函數第一行有一條隱式的語句super();
 super():會訪問父類中的空參數的構造函數,且子類中的全部構造函數默認第一行都是super();this

 

public class ExtendsDemo {

    public static void main(String[] args) {
        Zi zi=new Zi();

    }

}

class Fu{
    Fu(){
        System.out.println("show fu");
    }
}

class Zi extends Fu{
    Zi(){
        //super()  隱式語句
        System.out.println("show zi");
    }
}

輸出結果:spa

show fu
show zicode

 先運行super(),運行父類的空參數構造函數,再運行子類本身的方法。blog

 

默認時,父類的有參構造函數不能直接被子類繼承,由於super()只能直繼承父類中無參的構造函數,繼承

繼承有參構造函數,則super就不能隱式了,要用super直接調用用父類的有參構造函數class

調用父類的通常方法用super.父類方法名,調用父類構造用super(父類方法名);變量

同時,super語句和this語句同樣,放在子類構造函數的第一行;構造函數

子類一實例化,就會去找父類方法

 

以下:

public class ExtendsDemo {

    public static void main(String[] args) {
        Zi z = new Zi();
        Zi z1 = new Zi(3);

    }

}

class Fu {
    Fu(int x) {
        System.out.println("show fu" + x);
    }
}

class Zi extends Fu {
    Zi() {
        // super() 隱式語句
        super(3); // 調用父類對應的構造函數
        System.out.println("show zi");
    }

    Zi(int x) {
        // super()
        super(5); // 調用父類對應的構造函數
        System.out.println("zi..." + x);

    }
}

輸出:

show fu3
show zi
show fu5
zi...3

 

public class ExtendsDemo1 {

    public static void main(String[] args) {
        Student student = new Student("nike");
        student.show();
    }

}

class Person {
    String name;

    Person(String name) {
        this.name = name;
    }

    void show() {
        System.out.println(name +"......"+ "go");
    }
}

class Student extends Person {
    Student(String name) {
        super(name);    //調用父類的變量
    }

    void show() {
        super.show();    //調用父類的方法
    }
}

輸出:

nike......go

 

子類的構造函數第一行,也能夠用this設備名手動指定訪問本類中的構造函數。子類中會有一個構造函數,會訪問父類中的構造函數。

public class ExtendsDemo {

    public static void main(String[] args) {
        Zi z = new Zi(7);
    }

}

class Fu {

    Fu(int x) { // 父類初始化後,m初始值變成了11
        System.out.println(x);
    }
}

class Zi extends Fu {
    Zi() {
        //super(); //隱式語句
        super(5); // 調用父類對應的構造函數
        System.out.println("show zi");
    }

    Zi(int x) {
        this();//調用Zi(),同時再也不有super(),由於super()只能在第一行
        System.out.println("zi..." + x);

    }
}

輸入出:

5show zizi...7

相關文章
相關標籤/搜索