子父类中的构造函数

子父类构造函数


*在对子类的构造函数进行初始化时,对父类的构造函数也会运行
那是因为子类构造函数第一行有一条隐式的语句super();
 super():会访问父类中的空参数的构造函数,且子类中的所有构造函数默认第一行都是super();

 

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");
    }
}

输出结果:

show fu
show zi

 先运行super(),运行父类的空参数构造函数,再运行子类自己的方法。

 

默认时,父类的有参构造函数不能直接被子类继承,因为super()只能直继承父类中无参的构造函数,

继承有参构造函数,则super就不能隐式了,要用super直接调用用父类的有参构造函数

调用父类的一般方法用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);

    }
}

输入出:

5
show zi
zi...7

posted @ 2017-02-23 17:00  自学开发的老司机  阅读(722)  评论(0编辑  收藏  举报