Java子类继承父类执行顺序
new一个类对象,类中各部分执行顺序:静态代码块->非静态代码块->构造函数->一般方法。
public class father { private String name; father(){ System.out.println("--父类的无参构造函数--"); } father(String name){ this.name=name; System.out.println("--父类的有参构造函数--"+this.name); } static{ System.out.println("--父类的静态代码块--"); } { System.out.println("--父类的非静态代码块--"); } public void speak(){ System.out.println("--父类的方法--"); } public static void main(String[] args) { System.out.println("--父类主程序--"); father father=new father("父亲的名字"); father.speak(); } }
运行如上main方法结果为:
创建子类继承该父类测试执行顺序:
public class Son extends father{ private String name; static{ System.out.println("--子类的静态代码块--"); } { System.out.println("--子类的非静态代码块--"); } Son(){ System.out.println("--子类的无参构造函数--"); } Son(String name){ this.name=name; System.out.println("--子类的有参构造函数--"+this.name); } @Override public void speak(){ System.out.println("--子类Override了父类的方法--"); } public static void main(String[] args) { System.out.println("--子类主程序--"); Son son=new Son("儿子的名字"); son.speak(); } }
运行如上main方法结果如下:
运行如下main方法:
public static void main(String[] args) { System.out.println("--子类主程序--"); Son son=new Son("儿子的名字"); son.speak(); father father=new father("父亲的名字"); father.speak(); }
结果如下:
总结:
new一个类对象,类中各部分执行顺序:静态代码块->非静态代码块->构造函数->一般方法。
子类继承父类各部分执行顺序为:父静态代码块->子静态代码块->父非静态代码->父无参构造函数->子非静态代码块->子构造函数->方法。
注意:创建子类对象调用子类的构造方法的时候会先调用父类的构造方法,在子类的构造方法中调用父类的构造方法是用super(),如果没有写super(),则默认调用父类的无参构造方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具