1.1当父类中同时有无参和有参构造函数时,子类继承父类,调用子类的无参构造函数,这是无论写不写super();其结果都一样,都是先调用父类的无参构造,再调用子类的无参构造,代码如下
class Father{ String s="aaaaaaaa"; public Father(String s) { this.s = s; System.out.println(s+"我是father有参构造"); } public Father() { System.out.println(s+"我是father无参构造"); } } class Son extends Father{ public Son() { //super();这里写不写super不影响结果 System.out.println(s+"我是son无参构造"); }
/*public Son(String s) {
super(s);
System.out.println(s+"我是son有参构造");;
}*/ } public class Test1 { public static void main(String[] args) { Son s1=new Son(); } }
输出结果:
aaaaaaaa我是father无参构造
aaaaaaaa我是son无参构造
1.2如果父类中并没有无参和有参的构造方法,系统会默认帮你创建一个无参构造方法,程序也会执行
输出结果:
aaaaaaaa我是son无参构造
1.3如果父类中存在有参构造方法,没有无参构造方法,这时系统不会帮你创建无参构造方法,程序会发生异常
输出结果:
Implicit super constructor Father() is undefined(父类的无参构造方法未定义)
2.1子类是有参构造时,
class Father{ String s="aaaaaaaa"; public Father(String s) { this.s = s; System.out.println(s+"我是father有参构造"); } public Father() { System.out.println(s+"我是father无参构造"); } } class Son extends Father{ public Son() { //super(); System.out.println(s+"我是son无参构造"); } public Son(String s) { super(s);//有无super,区别 System.out.println(s+"我是son有参构造");; } } public class Test1 { public static void main(String[] args) { Son s1=new Son("hello"); } }
有super时调用父类有参构造,无super时,调用父类无参构造
console结果:
hello我是father有参构造
hello我是son有参构造
----------------------------------------
aaaaaaaa我是father无参构造
hello我是son有参构造