java学习总结五:继承中子父类的构造函数

来源:互联网 发布:电脑桌面日历软件 编辑:程序博客网 时间:2024/06/01 18:51

子类中的所有的构造函数的第一句都隐式地含有父类中的空参构造函数 super()
当父类中有带参数的构造函数时,编译往往不会通过,这是因为父类中的默认空参构造函数不存在了,子类依旧隐式地含有super(),但却调用不到父类中的空参构造函数。
解决方法:
在子类中定义super(参数)来访问父类中带参数的构造函数,但是必须写在第一行,否则不能编译。
代码示例:

class Fu{    int num ;    int age;    Fu(){        System.out.println("Fu run");    }    Fu(int a){        age =a;        num = 4;        System.out.println("num="+num+",age="+age);    }    }class Zi extends Fu{    Zi(int a){     //super();     //这里本身是隐式含有super(),调用父类中的构造函数,如果父类中没有空参构造函数,则会编译不通过     super(3);     System.out.println(a);    }}class ExtendDemo1{    public static void main(String[] args)     {        Zi z = new Zi(3);    }}

当构造函数有this的时候。super函数就不存在了,因为这两个函数都必须在第一行
这两个函数必须在第一行,是因为初始化要先进行。
父类中构造函数在子类初始化的应用:

子类调用父类中的初始化函数来进行初始化,只需要在父类中初始化一次就可以

class Person{    private String name;    private int age;    Person(String name,int age){        this.name = name;        this.age = age;    }    public void setName(String name){        this.name =name;    }    public String getName(){        return name;    }}class Student extends Person{    Student(String name,int age){    super(name,age);  //调用父类的初始化函数进行初始化    }   }class worker extends Person{    private double pay;    Worker(String name,int age,double pay){        super(name,age);        this.pay = pay;}class  ExtendsDemo2{    public static void main(String[] args)     {        Student a = new Student("lisi",20);        System.out.println(a.getName());    }}
1 0