继承时父子类的初始化顺序是怎样的
Posted super码王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承时父子类的初始化顺序是怎样的相关的知识,希望对你有一定的参考价值。
在上一节中我们阐述了 一个类被初始化的过程_super码王的博客-CSDN博客
一个类被初始化的过程_super码王的博客-CSDN博客https://blog.csdn.net/qq_41885673/article/details/123826227?spm=1001.2014.3001.5502下面我们来组合一下,当存在父子类的时候,他的类加载机制又是怎样的呢?
代码设计
父类
package com.wust.yq;
public class ParentClass
//静态变量
public static String p_StaticField = "父类--静态变量";
//变量
public String p_Field = "父类--变量";
protected int i = 0;
protected int j = 0;
//静态初始化块
static
System.out.println(p_StaticField);
System.out.println("父类--静态初始化块");
//构造器
public ParentClass()
System.out.println("父类--构造器");
System.out.println("i=" + i + ", j=" + j);
i = 1;
j = 1;
子类
package com.wust.yq;
public class ChildClass extends ParentClass
//静态变量
public static String s_StaticField = "子类--静态变量";
//变量
public String s_Field = "子类--变量";
//静态初始化块
static
System.out.println(s_StaticField);
System.out.println("子类--静态初始化块");
//初始化块
System.out.println(s_Field);
System.out.println("子类--初始化块");
public ChildClass()
System.out.println("子类--构造器");
System.out.println("i=" + i + ", j=" + j);
public static void main(String[] args)
new ChildClass();
// new ParentClass();
运行结果展示
- 当只是加载子类时调用顺序(注释掉下面两行代码即可)
也就是说和我们上节课讲道德 类加载的时候只涉及静态属性的初始化,完全符合,对于父子类这种情形,父类先完成类的加载,子类后完成。
- 初始化子类
同样,这个也是符合我们的预期的,即完成了父子类的静态代码块初始化之后再初始化实例类型,只不过都是先父类再子类
- 初始化父类
同样,这个也是符合我们的预期的,即完成了父子类的静态代码块初始化之后再初始化实例类型,只不过这里只实例化了父类
以上是关于继承时父子类的初始化顺序是怎样的的主要内容,如果未能解决你的问题,请参考以下文章