java中子类继承父类构造函数,java中子类如何继承父类
首先,构造方法本身将有一个隐式的无参数构造(默认):
不要写构造方法,类的第一行代码其实有一个默认的无参数构造(系统会隐式的给你写)
公共课学生{
私有字符串名称;
//public Student() {}在这里隐式“写”,你看不到
//虽然strudent类中没有写构造方法,但是相当于有了上面的无参数构造。
//只是隐式的,看不出来
}(推荐视频:java视频教程)
只写带参数的构造方法,相当于只写带参数的构造方法(不带参数的隐式构造会被屏蔽忽略,视为无效)。
公共课学生{
私有字符串名称;
公共学生(字符串名称){
this.name=name
}
//此时,原Strudent类中的隐式无参数构造方法被阻塞,无效。
//类中只有带参数的构造
} 如果希望既有无参数结构又有无参数结构,必须显式写出无参数结构和无参数结构。
公共课学生{
私有字符串名称;
公共学生(){}
//显式写出无参数构造
公共学生(字符串名称){
this.name=name
}
//如果想在Strudent类中有一个无参数的构造函数,就必须显式地写出来。
}进一步结合继承,需要考虑子父类:
在子类的构造方法中(带参数和不带参数),方法中的第一行代码隐式包含父类的无参数构造方法。
也就是超级()
公共课Stu扩展学生{
私有字符串名称;
公共Stu() {
//super();
//在子类的无参数构造中,super()隐式“写”在这里
}
公共Stu(字符串名){
//super();
this.name=name
//在子类的参数构造中,上面的super()也隐式“写”在这里。
}
}这就是为什么在调用子类的构造函数时,先调用父类的无参数构造函数,因为默认的super()是存在的。
(5)同样,类似于上面的(2),如果此时写一个参数构造,super(xx)会屏蔽隐式的super()。
公共课Stu扩展学生{
私有字符串名称;
公共Stu(字符串名){
//super();这里写的原隐式super()被阻塞无效。
超级(名);
//在子类的参数构造中,由于super(name)的存在,super()无效
//此时子类的参数构造中只有super(name)。
}
}这就是为什么当父类没有无参数构造时(即只有参数化构造3354对应的情况),子类的构造方法编译无法通过。这是因为子类的构造函数(有或没有参数)会调用父类的无参数构造函数。因为编译器试图将super()插入到一个子类的2个构造函数中,但是父类的默认构造函数未定义,所以编译器会报错。
为了解决这个问题,我们只需要
1)向父类添加无参数构造函数3354向父类显式添加无参数构造函数。
2)删除父类中的自定义参数化构造函数3354相当于恢复默认的无参数构造函数。
3)将Super(XXX)添加到子类构造函数3354中。通过的原体屏蔽掉默认的super()。
本文来自我们,java教程专栏,欢迎学习!以上是JAVA继承中子父类构造方法的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。