Java知識(二):親子クラスの呼び出し順を継承する

7703 ワード

親コード
package cn.test;

public class Root {
	static {//     
		System.out.println("Root      ");
	}
	
	{//     
		System.out.println("Root      ");
	}
	
	public Root() {//      
		System.out.println("Root         ");
	}
}

世代のサブクラスコード
class Mid extends Root{
	static {//     
		System.out.println("Mid       ");
	}
	
	{//     
		System.out.println("Mid       ");
	}
	
	public Mid() {//      
		System.out.println("Mid         ");
	}
	
	public Mid(String msg) {//      
		this();//    Mid       
		System.out.println("Mid        "+msg);
	}
}


にだいサブクラスコード
class Leaf extends Mid{
	static {//     
		System.out.println("Leaf      ");
	}
	
	{//     
		System.out.println("Leaf      ");
	}
	
	public Leaf() {//      
		super("Mid");//    Mid       ,   Mid    
		System.out.println("  Leaf    ");
	}
}


しゅプログラムコード
	public static void main(String[] args) {
		new Leaf();
	}

テスト結果
Root      
Mid       
Leaf      
Root      
Root         
Mid       
Mid         
Mid        Mid
Leaf      
  Leaf    

要約:staticキーワード修飾を使用して、クラスがインスタンスオブジェクトより大きいと宣言します.したがって、クラスでは、static(メソッドまたはコードブロック)→通常(メソッドまたはコードブロック)→コンストラクション関数の順に実行されます.
継承関係のある子親クラスでは、親静的(メソッドまたはコードブロック)→子静的(メソッドまたはコードブロック)→親非静的(メソッドまたはコードブロック)→親構造関数→子非静的(メソッドまたはコードブロック)→子構造関数