首先说说为什么会有 子类重写 父类的构造方法: 我们知道,子类初始化之前都会首先初始化父类,静态变量不必说了。因为实例变量是在构造函数里面初始化的或者说是通过调用构造函数来初始化的。所以我们要在子类中通过super关键字调用父类构造函数。
编译器默认的话 在子类的构造器的第一行自动编译上super()来调用父类默认的构造函数,只是我们这里省略了,其实这是编译器实现的,代码中不用 显式 写出来罢了。
但是,如果你在编写父类是自己写了带参构造函数但并没有显示的写一个无参构造函数的话,子类中你就必须 显式的 用super关键字在子类的构造函数第一行中写上super(父类参数对应)。当父类中有多个带参的构造函数时,你可以调用任意一个都是可以的,这要根据情况而定!!
最后再说一句:构造函数是用来 初始化 实例变量的!!!子类在初始化之前先初始化父类的实例变量,注意:是实例变量。
构造器本来就可以不用写。
比如你的父类有private A,private B
那么构造函数默认为(A = null;B = null);
子类如果继承了父类,而且有自己的private C
则也是使用默认的(A = null;B = null;C = null);
但是如果父类的构造不是缺省的,比如(A = "aaaa";B = 1);
那么子类在没有构造函数的情况下则是使用(A = "aaaa";B = 1;C = null)构造器
这个不一定的
1.如果父类有默认构造器(构造器没有参数),则子类随意
2.如果父类没有默认构造器,但是有其他的构造器(有参数),则子类必须要写构造器
每一个类都默认有一个无参的构造方法.并且会默认有一句super()去调用父类的无参构造方法