Java继承构造方法的访问特点:
1、子类构造方法中有一个默认隐含的super()调用,所以一定是先调用的父类构造,后执行的子类构造
2、子类构造可以通过super关键字来调用父类重载构造
3、super的父类构造调用,必须是子类构造方法的第一个语句,不能一个子类构造调用多次super构造
4、子类必须调用父类构造方法,不写则默认瘾式赠送一个super();写了则用写的指定的super调用,super只能有一个,还必须是第一个
详细:
1、子类构造方法中有一个默认隐含的super()调用,所以一定是先调用的父类构造,后执行的子类构造
瘾式调用super()方法如图上图所示
2、子类构造可以通过super关键字来调用父类重载构造
在此之前先来看一个案例
我在无参构造方法的基础上添加一个 int num 使其称为一个有参构造,结果编译器报错了
原因是Zi在调用Fu类的无参构造方法的时候,Zi类中编译器会默认送一个super()方法,使其调用Fu类的无参构造方法,现在,无参构造方法的基础上添加一个 int num 使其称为一个有参构造后,结果编译器显示的错误如下
There is no default constructor available 'com.baidu1.Fu'
翻译过来就是:没有可用的默认构造函数'com.baidu1.Fu'
用人的话来说,在com.baidu1这个包下的Fu类没有可以使用的构造方法
解决的办法就是重载一个父类无参构造方法,或者用super()带参调用Fu类的有参的构造方法
第一种,重载一个父类无参构造方法
这个方法依然是调用的无参构造
第二种方法,用super()带参调用Fu类的有参的构造方法
这种方法是调用Fu类的有参构造,因为要传参数啦
3、super的父类构造调用,必须是子类构造方法的第一个语句,不能一个子类构造调用多次super构造
演示第一个错误的写法
错误原因:只有子类构造方法才能调用父类构造方法,普通方法是不能调用的
演示第一个错误的写法
来看一下错误提示:
Call 'super()' must be first statement in constructor body
翻译:调用“super()”必须是构造函数体中的第一个语句
================================
注意:调用“super()”必须是构造函数体中的第一个语句,
翻译是说的第一个语句,而不是编译器中的构造方法的第一行,这个有很大的区别
下面这样依然报错
语句应该是以 ; 结尾的,语句应该是以 ; 结尾的,语句应该是以 ; 结尾的
说三遍