• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

java的继承,子类是否继承父类的构造函数

java 搞代码 4年前 (2022-01-09) 15次浏览 已收录 0个评论
文章目录[隐藏]

java中继承,子类是否继承父类的构造函数

java继承中子类是不会继承父类的构造函数的,只是必须调用(隐式或者显式)

下面来看例子:

public class TestExtends {    public static void main(String[] args) {        SonClass s = new SonClass(66);    }}class FooClass{    public FooClass() {        System.out.println(100);    }    public FooClass(int count) {        System.out.println(count);    }}class SonClass extends FooClass{    public SonClass() {    }    public SonClass(int c) {        System.out.println(1234);    }}

运行结果:

100
1234

接下来分析为什么会产生这样的结果:
程序在执行SonClass s = new SonClass(66);这行时,调用

public SonClass(int c) {    System.out.println(1234);  //在执行这行时系统会优先调用父类的无参构造函数super();}

因此子类在执行上面的构造方法时,等价于执行了下面本文来源gaodai#ma#com搞*!代#%^码$网!的代码:

public SonClass(int c) {    super(); // 必须在第一行调用,否则不能编译    System.out.println(1234);  //在执行这行时系统会优先调用父类的无参构造函数super();}

所以结果为:
100 1234

接下来介绍另外一种情况(显式调用),如果子类构造函数是这样写的:

public SonClass(int c) {    super(2); // 必须写在第一行,否则不能编译,显式调用父类构造函数后,系统就不在默认调用无参构造函数了    System.out.println(1234);}

执行结构是:
2 1234

总结:

  • 构造函数是不能继承的,只是用来在子类调用,(如果父类没有无参构造函数,创建子类时,必须在子类构造函数代码体的第一行显式调用父类的有参数构造函数,否则不能编译);

  • 如果父类没有有参构造函数,那么在创建子类时可以不显式调用父类构造函数,系统会默认调用父类的无参构造函数super();

  • 如果父类没有无参构造函数,那系统就调不了默认的无参构造函数了,所以不显示调用编译也就无法通过了;

补充说明:

  1. 在java中,创建有参构造函数后,系统就不在有默认的无参构造函数

  2. 如果父类中没有任何构造函数,系统会默认有一个无参的构造函数

以上就是java的继承,子类是否继承父类的构造函数的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:java的继承,子类是否继承父类的构造函数

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址