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();
}

因此子类在执行上面的构造方法时,等价于执行了下面的代码:

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. 如果父类中没有任何构造函数,系统会默认有一个无参的构造函数

最新文章

  1. json的场景应用与实战
  2. 日志文件清理工具V1.1
  3. php 和mysql httpd 简单网页的搭建
  4. 仿淘宝js图片切换
  5. 线性回归的Spark实现 [Linear Regression / Machine Learning / Spark]
  6. python UTC,时间戳,字符串转换
  7. yaffs2文件系统
  8. File上传
  9. 转:Zend_Cache的使用
  10. Nutch之简介与安装
  11. 点击弹窗后再刷新html页面
  12. Luogu4495 [HAOI2018] 奇怪的背包 【扩展欧几里得算法】
  13. foreach控制循环if判断
  14. 听闻 kubernetes,快速了解一番
  15. 使用jenkins管理uirecorder录制的任务
  16. UVA.11806 Cheerleaders (组合数学 容斥原理 二进制枚举)
  17. NO.1:自学python之路------Hello world、判断、循环
  18. Android -- 再来一发Intent
  19. Spring 事务管理tx,aop
  20. [Errno 14] problem making ssl connection Trying other mirror.

热门文章

  1. Java源码解析|HashMap的前世今生
  2. SpringBoot2.x升级踩坑--新增Configuration property name限制
  3. https协议分析
  4. std::tuple
  5. Spring Boot 2.X(十):自定义注册 Servlet、Filter、Listener
  6. Redis 消息队列的实现
  7. python soket服务和客户端Demo
  8. 2.Linux Bash认识
  9. Git & Github 使用教程【1】入门篇
  10. vue移动端 实现手机左右滑动入场动画