今天,初學java不是很久,遇到了父類子類的繼承關係的問題。看着視頻,內心一萬個草泥馬,這怎麼不是我想的這樣啊。於是結合視頻老師的教導和自己網上查找資料,最後終於搞懂了java繼承的問題。爲表達心中的欣喜之情,特別寫出來與大家分享。
先跟大家分享一下實例化的過程:
Person p = new Person();
1,JVM會讀取指定的路徑下的Person.class文件,並加載進內存,並會先加載Person的父類(如果有直接的父類的情況下).
2,在堆內存中開闢空間,分配地址。
3,並在對象空間中,對對象中的屬性進行默認初始化。
4,調用對應的構造函數進行初始化。
5,在構造函數中,第一行會先調用父類中構造函數進行初始化。
6,父類初始化完畢後,再對子類的屬性進行顯示初始化。--這句很關鍵。
7,進行子類構造函數的特定初始化。
8,初始化完畢後,將地址值賦值給引用變量Person p.
class Fu
{
Fu()
{
show(); //通過結果可以看出,子父類有同名show方法,調用的是子類show方法(這個是就近原則)。
return;
}
void show()
{
System.out.println("fu show");
}
}
class Zi extends Fu
{
int num = 8;
Zi()
{
super();
//-->通過super初始化父類內容時,子類的成員變量並未顯示初始化。等super()父類初始化完畢後,
//才進行子類的成員變量顯示初始化。
System.out.println("zi cons run...."+num);
return;
}
void show()
{
System.out.println("zi show..."+num);
}
}
class ExtendsDemo5
{
public static void main(String[] args)
{
Zi z = new Zi();
z.show();
}
}
因此最後打印的結果是如下這樣的:
zi show...0
zi cons run....8
zi show...8
相信大家把實例化的過程搞懂了之後,以後就不會再次出現錯誤了。
一起加油。!!!!