Java子类实例化时,子类、父类的构造函数、属性、方法的执行顺序:
1.初始化父类的静态代码块、静态代码
2.初始化子类的静态代码块、静态代码
3.初始化父类的非静态代码
4.执行父类的构造函数
5.初始化子类的非静态代码
6.执行子类的构造函数
package cn.lt.libie.utils;
/**
* @description: 子类父类实例化测试
* @author:
* @createTime:
**/
public class Child extends Parent{
public String name = "Child";
public String childName = "childName";
public static String staticName = "staticName";
public static void main(String[] args) {
Child child = new Child();
}
public Child(){
System.out.println("Child构造函数");
System.out.println("name:"+name);
System.out.println("childName:"+childName);
print();
}
public void print(){
System.out.println("Child的print方法中的name:"+name);
}
}
class OldParent {
public String name = "OldParent";
public String oldParentName = "oldParentName";
public OldParent(){
System.out.println("OldParent构造函数");
System.out.println("name:"+name);
System.out.println("oldParentName:"+oldParentName);
print();
}
public void print(){
System.out.println("OldParent的print方法中的name:"+name);
}
}
class Parent extends OldParent{
public String name = "Parent";
public String parentName = "parentName";
public Parent(){
System.out.println("Parent构造函数");
System.out.println("name:"+name);
System.out.println("parentName:"+parentName);
print();
}
public void print(){
System.out.println("Parent的print方法中的name:"+name);
}
}
执行结果如下
OldParent构造函数
name:OldParent //构造函数中的name是当前类(OldParent)中的变量
oldParentName:oldParentName
Child的print方法中的name:null //执行的方法是Child的print方法,此时Child中的name未初始化
Parent构造函数
name:Parent //构造函数中的name是当前类(Parent)中的变量
parentName:parentName
Child的print方法中的name:null //执行的方法是Child的print方法,此时Child中的name未初始化
Child构造函数
name:Child //构造函数中的name是当前类(Child)中的变量
childName:childName
Child的print方法中的name:Child //执行的方法是Child的print方法,此时Child中的name已初始化