什么时候必须显式的调用父类构造函…

复制代码
package HighNewTech;
 
public class Parent {
private String name= null;
private int age = 0;
Parent(String name,int age){
System.out.println("ssssss");
}
Parent(){
System.out.println("ssssss");
}
}
 
class Child extends Parent{
private String name = null;
private int age = 0;
// Son(String name,int age){
//// super();
//// super(name,age);
// }
}
复制代码

 

先理解一个对象的实例化过程即可。
Child extend Parent

在实例化Child的时候,会先去实例化Parent(嵌套的一层层上溯)。

Child c = new Child();一瞬间做的事情:
实例化是在构造函数中完成的,那么,调用Child的构造函数时候,必须先拿到Parent的对象也就是调用Parent的构造函数。

Parent没有默认构造函数,Child也只有一个带参构造函数。
Child c = new Child(p);
要实例化c必须先实例化Parent
但是,Parent没有默认构造函数,只能用带参构造函数实例化它。
但你的子类代码中没有显式去调用Parent的那个构造函数,Parent就无法完成初始化。

何时子类必须显式调用父类构造函数:
1 父类没有默认构造函数(这时候子类必须无条件显式写一个任意的构造函数包括默认构造函数,第一句就是super(...))

2 父类有默认构造函数,但子类的构造函数不想jvm调用父类默认的那个构造函数, 就要用spuer(...)(如果父类还有其他构造函数)

其他场景,都是可写可不写。但是一旦写了super(...),super的参数怎么给必须与父类的构造函数相符。

 
 
总结:只要父类有带参的构造函数,在子类中就必须显式的调用父类的构造函数,因为子类的构造器实例化的时候无法找到父类的构造函数(父类中有自己写的无参的构造函数时子类也不用显示的调用)。
posted @   rainbow70626  阅读(446)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2015-09-13 关于C#的静态类和静态构造函数
点击右上角即可分享
微信分享提示