什么时候必须显式的调用父类构造函…
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的参数怎么给必须与父类的构造函数相符。
总结:只要父类有带参的构造函数,在子类中就必须显式的调用父类的构造函数,因为子类的构造器实例化的时候无法找到父类的构造函数(父类中有自己写的无参的构造函数时子类也不用显示的调用)。
分类:
C#与.NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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#的静态类和静态构造函数