java中继承,子类是否继承父类的构造函数
2024-08-24 05:47:39
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()
;- 如果父类没有无参构造函数,那系统就调不了默认的无参构造函数了,所以不显示调用编译也就无法通过了;
补充说明:
- 在java中,创建有参构造函数后,系统就不在有默认的无参构造函数
- 如果父类中没有任何构造函数,系统会默认有一个无参的构造函数
最新文章
- json的场景应用与实战
- 日志文件清理工具V1.1
- php 和mysql httpd 简单网页的搭建
- 仿淘宝js图片切换
- 线性回归的Spark实现 [Linear Regression / Machine Learning / Spark]
- python UTC,时间戳,字符串转换
- yaffs2文件系统
- File上传
- 转:Zend_Cache的使用
- Nutch之简介与安装
- 点击弹窗后再刷新html页面
- Luogu4495 [HAOI2018] 奇怪的背包 【扩展欧几里得算法】
- foreach控制循环if判断
- 听闻 kubernetes,快速了解一番
- 使用jenkins管理uirecorder录制的任务
- UVA.11806 Cheerleaders (组合数学 容斥原理 二进制枚举)
- NO.1:自学python之路------Hello world、判断、循环
- Android -- 再来一发Intent
- Spring 事务管理tx,aop
- [Errno 14] problem making ssl connection Trying other mirror.