后来才发现,并不是所有的喜欢都会有结果,终究要明白,遇见就已经很难得,你让我觉得,我们的关系,不止这样,又只能这样。
关于继承中的构造方法的执行顺序是怎么样的?
首先创建子父类,创建测试类
//父类
public class Fu {
}
//子类
public class Zi extends Fu{
}
//测试类
public class TestA {
}
在父类中创建有参构造和无参构造
//父类
public class Fu {
public Fu(){
System.out.println("父类无参");
}
public Fu(int i ){
System.out.println("父类有参");
}
}
在子类中创建有参构造和无参构造
//子类
public class Zi extends Fu{
public Zi(){
System.out.println("子类无参");
}
public Zi(int age){
System.out.println("子类有参");
}
}
当我们在测试里面new了子类的对象,发现无法调用父类中的构造方法
构造方法无法被继承
但是当我们只写了调用子类的无参方法,编译就会不一样:
我们会发现,我们只是调用了子类的无参,但是父类的无参也输出了,这是因为在子类的构造方法内,有一个隐藏的super();,我们之前用supre调用的时父类属性,而super()调用的父类的构造方法
这个是系统默认调用的,当我们调用子类的无参构造的时候,他会执行第一个语句,也就是supper(),于是就会去执行父类的无参方法输出父类无参之后,程序继续让下执行,输出子类无参
我们的子类构造方法是有参的,那么我们在测试类上加入参数
在子类的有参内,同样还是有一个super(),同样回调取到父类无参,那怎么获取父类的有参呢?其实我们只需要在子类的构造方法内,在super()的括号内写入参数就可以了
我们在一个构造方法内写入super(),那么系统就不会使用它默认的super()了,使用我们写的这个来运行
运行:
总结:
- 构造方法无法被继承、但可以通过其他方法调用
- 构造方法下有一个默认调用父类的无参构造,super()
- 如果手动添加super,那么系统就会运行我们手动添加的这个
- super必须使用在第一行
- 我们使用this在构造方法内调取成员变量,也必须要放第一行,所以就跟super冲突了,所以this和super在一个构造中,不能同时使用
来张心灵净化图,缓解身心疲劳: