总结:
构造函数不能继承,只是调用而已。
子类在创建无参构造函数时,会默认调用父类无参构造函数,且放在第一行。
子类在创建有参构造函数时,如果不显示调用父类有参构造函数(super(int a))则会默认调用无参构造函数;如果显示调用了父类有参则不会再调用无参的。
【在面向对象的继承过程中,父类一定要有无参构造方法】
this和super的区分:
Super和this不能同时出现因为这两个都要在第一行,写了this再写super,this他会先调用本类其他方法,super再在其他的方法基础上在调其他方法的父类。又要都在第一行,冲突啦
this()表示本类的无参构造方法
super()表示父类的无参
代码理解:
public class FatherClass {
public FatherClass() {
System.out.println(100);
}
public FatherClass(int age) {
System.out.println(age);
}
}
public class SonClass extends FatherClass{
public SonClass() {
}
public SonClass(int c) {
System.out.println(1234);
}
public static void main(String[] args) {
FatherClass f = new FatherClass(28);
SonClass s = new SonClass(66);
}
}
编译后执行结果如下是什么呢?
分析:1. FatherClass f = new FatherClass(28);这句没有必要解释
2.SonClass s = new SonClass(66);执行这句时,调用
public SonClass(int c) {
System.out.println(1234);
}
在这个构造函数中,等价于
public SonClass(int c) {
super();//必须是第1行,否则不能编译
System.out.println(1234);
}
所以结果是 100
1234
3.如果子类构造函数是这样写的
public SonClass(int c) {
super(22);//必须是第1行,否则不能编译
//显示调用了super后,系统就不再调用super();
System.out.println(1234);
}
执行结果是 22
1234