子父类中的构造函数
子父类构造函数
*在对子类的构造函数进行初始化时,对父类的构造函数也会运行
那是因为子类构造函数第一行有一条隐式的语句super();
super():会访问父类中的空参数的构造函数,且子类中的所有构造函数默认第一行都是super();
public class ExtendsDemo { public static void main(String[] args) { Zi zi=new Zi(); } } class Fu{ Fu(){ System.out.println("show fu"); } } class Zi extends Fu{ Zi(){ //super() 隐式语句 System.out.println("show zi"); } }
输出结果:
show fu
show zi
先运行super(),运行父类的空参数构造函数,再运行子类自己的方法。
默认时,父类的有参构造函数不能直接被子类继承,因为super()只能直继承父类中无参的构造函数,
继承有参构造函数,则super就不能隐式了,要用super直接调用用父类的有参构造函数
调用父类的一般方法用super.父类方法名,调用父类构造用super(父类方法名);
同时,super语句和this语句一样,放在子类构造函数的第一行;
子类一实例化,就会去找父类。
如下:
public class ExtendsDemo { public static void main(String[] args) { Zi z = new Zi(); Zi z1 = new Zi(3); } } class Fu { Fu(int x) { System.out.println("show fu" + x); } } class Zi extends Fu { Zi() { // super() 隐式语句 super(3); // 调用父类对应的构造函数 System.out.println("show zi"); } Zi(int x) { // super() super(5); // 调用父类对应的构造函数 System.out.println("zi..." + x); } }
输出:
show fu3
show zi
show fu5
zi...3
public class ExtendsDemo1 { public static void main(String[] args) { Student student = new Student("nike"); student.show(); } } class Person { String name; Person(String name) { this.name = name; } void show() { System.out.println(name +"......"+ "go"); } } class Student extends Person { Student(String name) { super(name); //调用父类的变量 } void show() { super.show(); //调用父类的方法 } }
输出:
nike......go
子类的构造函数第一行,也可以用this设备名手动指定访问本类中的构造函数。子类中会有一个构造函数,会访问父类中的构造函数。
public class ExtendsDemo { public static void main(String[] args) { Zi z = new Zi(7); } } class Fu { Fu(int x) { // 父类初始化后,m初始值变成了11 System.out.println(x); } } class Zi extends Fu { Zi() { //super(); //隐式语句 super(5); // 调用父类对应的构造函数 System.out.println("show zi"); } Zi(int x) { this();//调用Zi(),同时不再有super(),因为super()只能在第一行 System.out.println("zi..." + x); } }
输入出:
5
show zi
zi...7
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)