构造方法中super()的作用
复习:名称
Java继承,子类实例化时,调用父类的无参构造方法
https://blog.csdn.net/Peng_Hong_fu/article/details/52862300
在类的继承中,子类的构造方法中默认会有super()语句存在,相当于执行父类的相应构造方法中的语句
如下面代码:
class Extends_Demo {
public static void main(String[] args) {
Cat c = new Cat(); *//---------------(1)*
System.out.println("-------------------");
Cat c1 = new Cat("花花",4); *//----------------(2)*
}
}
class Animal {
private String color;
private int foot;
public Animal(){
System.out.println("我是父类无参数构造器");
}
public Animal(String color,int foot){
System.out.println("我是父类有参数构造器");
this.color = color;
this.foot = foot;
}
}
class Cat extends Animal{
public Cat(){
super(); *//---------------可以省略*
System.out.println("我是子类无参数构造器");
}
public Cat(String color,int foot){
*//super(color,foot); //---------------(3)*
super(); *//---------------可以省略*
System.out.println("我是子类有参数构造器");
}
}
输出结果如下:
我是父类无参数构造器
我是子类无参数构造器
-----------------
我是父类无参数构造器
我是子类有参数构造器
请按任意键继续...
main方法中
(1)语句执行的是子类的无参数构造方法,内部默认有super(),代表执行父类无参数构造方法,因此输出父类无参数构造方法中的语句和子类无参数构造方法中的语句;
(2)语句执行的是子类有参数构造方法,内部也是默认有super(),代表执行父类无参数构造方法,输出语句是父类无参数构造方法中的语句和子类有参数构造方法中的语句;
若将(3)语句解除屏蔽,则子类有参构造方法中执行super(color,foot)表示执行父类有参构造方法Animal(color,foot),修改后子类:
class Cat extends Animal{
public Cat(){
super(); *//----------------可以省略*
System.out.println("我是子类无参数构造器");
}
public Cat(String color,int foot){
super(color,foot); *//---------------(3)*
*//super();*
System.out.println("我是子类有参数构造器");
}
}
输出:
我是父类无参数构造器
我是子类无参数构造器
-----------------
我是父类有参数构造器
我是子类有参数构造器
请按任意键继续...
对比后可以知道,super()代表执行父类无参数构造方法内容,super(color,foot)代表执行父类有参数构造方法。
转载之后的自我总结:
若不加修改的话,子类的构造器里都会有 super() 的方法,所以每个子类的构造器都会自动调用父类的无参构造方法。
本文为转载收藏
————————————————
版权声明:本文为CSDN博主「TT海浅」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010698072/article/details/51873404
本文来自博客园,作者:Y&Qter,转载请注明原文链接:https://www.cnblogs.com/qiantaosama/p/14989879.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?