子类的构造函数为什么总要super
1个回答
展开全部
这个就要说说java的类加载机制了。
先介绍就是java的类初始化。这4种情况会类初始化:
遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候,读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候。
使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。
.当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。
.当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。
再介绍下类加载顺序:
父类的静态代码块--->子类的静态代码块-->父类的非静态代码块-->父类构造函数-->子类非静态代码块--->初始化子类构造函数。
这个时候你就会发现为什么子类构造要super了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询