成員變量賦值時機與構造代碼塊執行順序

本文順接上一篇文章

      

        如果一個類繼承自一個類,這個類的含有成員變量並且賦初值

        則:成員變量在聲明後先會賦默認值,父類構造方法執行完畢之後再執行賦初值。


成員對應的默認值

byte  0
short  0
int  0
long  0
float  0.0
double  0.0
char  空格
boolean false
注:char類型默認值爲空格 \u0000


看代碼吧,雖然喜歡看總結好的文字,要真正的理解還是要靠代碼

public class Main
{
	public static void main(String[] args)
	{
		Parent parent = new Child();
		Child child = new Child();
		// parent向上轉型,引用Parent中的變量。
		System.out.println("parent + child = " + (parent.pi + child.pi));// 注意要括號起來,否則隱式轉換爲String類型
		
	}
}

class Parent 
{
	int pi = 5;
	public Parent()
	{
		show();
	}
	
	public void show()
	{
		System.out.println("Parent.show" + pi);
	}
}

class Child extends Parent
{
	
	int i = 10;
	int pi = 50; // 當父類
	{
		i++;
//		j++; 	Cannot reference a field before it is defined,級別相同,有先後順序
		System.out.println("構造代碼塊:" + i);
	}
	int j =0;
	public Child()
	{
//		super();// i == 0;當調用父類的構造方法的時候,變量i賦值爲默認值
		// 父類構造方法執行完畢開始執行成員屬性賦值,構造方法塊
		show();
	}
	
	public void show()
	{
		i++;
		System.out.println("Child.show" + i);
		System.out.println("Child.show" + pi);
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章