子父类构造函数
*在对子类的构造函数进行初始化时,对父类的构造函数也会运行
那是因为子类构造函数第一行有一条隐式的语句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()直接试用父类的有参构造函数
如下:
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
原文:http://www.cnblogs.com/ibelieve618/p/6434347.html