子父类中的构造函数

子父类构造函数函数


*在对子类的构造函数进行初始化时,对父类的构造函数也会运行
那是由于子类构造函数第一行有一条隐式的语句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

相关文章
相关标签/搜索