1. 程式人生 > >載入子類時,父類做了什麼?

載入子類時,父類做了什麼?

在做android或者java開發時,我們很少考慮到類載入的事情,因為這些事情,虛擬機器都幫我們做了。

可是,你有沒有想過,當我們new了一個子類的時候,父類是個什麼情況?

我們先說一下載入類時機。“類的程式碼在初次使用時才載入”,一般就是在我們new例項、使用靜態域或者使用靜態方法的時候去載入class檔案。

當我們new一個子類時,要去載入子類,可是在載入子類時,發現了extends關鍵字,說明有父類,那麼先去載入父類,以此類推,一直載入到Object。所有相關類載入完之後,從根基類開始執行靜態變數、靜態程式碼塊,然後是下一個匯出類,以此類推。靜態方法在載入類的時候就會載入到記憶體靜態儲存區,無需構造類的例項就可以呼叫。至此,所有的類都已經載入完成,可以開始例項化了,例項化時,先從根基類的構造方法開始執行起,然後是下一個匯出類,以此類推。在這個過程中,需要注意的是,雖然執行了父類的構造方法,但是沒有生成父類的物件,“執行構造方法是為生成物件初始化的,並不是生成物件”。其實,最終只new了一個子類物件出來。

這裡需要說明的是,許可權問題,我們知道有四種許可權:public、protected、private、預設許可權。我覺得,在繼承的時候,子類能把父類所有的東西都繼承下來,只不過,有些東西子類不能訪問而且也看不到,比如用private修飾的父類成員變數和成員方法,如果不是這樣,就不叫繼承了。