関係を継承するクラスのインスタンス化順序

2169 ワード

親Allen
public class Allen {
	//    
	private static String  NAME = "Allen Baba";
	
	//    
	private String id = "2017_JJ4";
	
	//    
	static{
		System.out.println("Baba stand_Play");
	}
	
	//    
	{
		System.out.println("Baba move_Play");
	}
	
	//  name  
	public String getName() {
		return NAME;
	}
	
	//  id  
	public String getId() {
		return id;
	}
	
	public void emmm() {
		System.out.println(NAME);
	}
	Allen() {
		emmm();
		System.out.println("This Constructor is->" + this);
		System.out.println(getName());
		System.out.println(getId());
	}
}


サブクラスLittleAllen
public class LittleAllen extends Allen{
	private static String NAME = "Little Allen";
	private String id = "Little_2017_JJ4";
	
	public static void Little_Stand_Play() {
		System.out.println("Little_Stand_Play");
	}
	
	public void Little_Move_Play() {
		System.out.println("Little_Move_Play");
	}
	
	static {
		System.out.println("Little_Stand_Play");
	}
	
	{
		System.out.println("Little_Move_Play");
	}
	
	public String getName() {
		return this.NAME;
	}
	
	public String getId() {
		return this.id;
	}
	
	public void little_emmmm() {
		System.out.println(NAME);
	}
	public LittleAllen() {
		little_emmmm();
		System.out.println("Little Allen Start~~~~");
		System.out.println(getName());
		System.out.println(getId());
	}
}

メイン関数Main
public class Main {
	public static void main(String[] args) {
		Allen allen = new LittleAllen();
	}
}

Result:
Baba stand_Play
Little_Stand_Play
Baba move_Play
Allen Baba
This Constructor is->qqttest.LittleAllen@7852e922
Little Allen
null  
Little_Move_Play
Little Allen
Little Allen Start~~~~
Little Allen
Little_2017_JJ4


まとめ:インスタンス化(クラスロード)の順序は、親静的変数->親静的メソッド->子静的変数->子静的メソッド->親インスタンス変数->親インスタンスメソッド->親構築メソッド->子インスタンス変数->子インスタンスメソッド->子クラス構築メソッドです.
説明:nullという出力結果があります.サブクラスは親のgetId()メソッドを書き換えていますが、インスタンス化順序ではidはprivate修飾の変数ですが、static静的修飾ではありませんので、この場合は対応する初期化値を出力することはできません.システムのデフォルトでnullに初期化するしかありません.