子父類繼承中成員變數顯示初始化的具體時間和相關問題

2021-08-18 18:03:19 字數 634 閱讀 6629

每個類都有預設的父類object;

在建立子類物件時,子類都有預設的super()關鍵字,super()呼叫的正是父類的建構函式,super()必須是在建構函式的第一句。

new乙個子類物件,是在堆記憶體中開闢乙個子類物件的空間,子類空間裡面包含的是父類空間,兩個空間存放的是各自的成員變數,而且都有預設初始化,這個子類物件是由this關鍵字引用的,在棧中一直都是this引用的物件(該問題就是子類物件)在呼叫方法。故每個輸出結果都是「zi show」

在棧中在子類建構函式進棧後,父類建構函式再進棧,相應的父類建構函式在子類建構函式之前彈棧,一旦父類建構函式彈棧子類物件立馬對成員變數進行顯示初始化。故第乙個輸出結果是num2=0(因為父類還沒有彈棧只有預設初始化),num1=10(因為子類沒有該變數,子類直接繼承,父類建構函式進棧之時就顯示初始化,故三條結果都是10)。

public class extendsdemo

}class fu

public void show()

}class zi extends fu

public void show()

執行結果:

類成員變數初始化

在 c 中,類的成員變數未初始化問題,取決於物件建立方式,不同的建立方式,直接導致類成員變數的初值不同。本文通過下例,得出一下結論 1.在函式體內置立乙個物件,類成員變數和普通的區域性變數一樣,是乙個隨機值。2.建立乙個全域性成員物件,類成員變數和全域性變數一樣,編譯器賦值為 0。3.在函式體內 n...

C 類中成員變數初始化

c 類中成員變數包括主要四種 普通成員變數,常量成員變數,靜態成員變數,靜態常量成員變數 上述成員變數該如何初始化,注意不是賦值。由於普通成員變數和常量成員變數,每乙個類例項化,都乙份記憶體拷貝。c 規定成員變數在宣告 注意宣告與定義區別 時,不允許初始化,因此這些變數只能放在建構函式初始化列表中。...

c 中成員物件初始化和類繼承初始化

對於繼承的物件,建構函式在成員初始化列表中使用類名來呼叫特定的基類建構函式。對於成員物件,建構函式則使用成員名。例如 ifndef h frabjous define h frabjous include class frabjous virtual void tell gloam gloam in...