java繼承實例化過程

今天,初學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

相信大家把實例化的過程搞懂了之後,以後就不會再次出現錯誤了。

一起加油。!!!!




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