繼承相關的面試題

2021-07-25 11:58:20 字數 1747 閱讀 5192

題目一:

class fu

}class zi extends fu

void show() }

class rectangle

}

執行順序:

1、類的初始化過程:成員變數的初始化,預設初始化,顯示初始化,構造方法初始化。

2、zi z = new zi(),首先jvm在堆記憶體中開闢乙個空間,並開始對這個記憶體空間進行初始化。

3、初始化過程:首先開闢空間的同時,本來是要呼叫 zi 類的構造方法,但是它存在繼承關係,所以首先去初始化父類的成員變數,對成員變數進行預設初始化,然後再進行顯示初始化,最後呼叫父類的構造方法;最後到子類進行相同的操作。

4、初始化完畢之後,就把位址賦給  z,然後  z 指向 new zi() 開闢的記憶體空間,z  也就可以呼叫 zi 的show方法,num代表的是當前方法的區域性變數,this.num代表的是當前類的全域性變數num,super.num代表的是父類的num。

5、輸出結果:fu,zi,30,50,10

題目二:

class fu

fu() }

class zi extends fu

zi() }

class text

}

執行順序:

1、執行new zi(),jvm開闢空間,同時為對應的記憶體空間進行初始化。初始化過程如下:

2、本來首先對子類進行初始化,但是子類繼承父類,所以首先初始化父類,但這次不是首先初始化父類的構造方法,而是首先實行父類的靜態**塊,因為靜態**塊是用於初始化類的,類一旦載入,就會首先執行靜態**塊。

3、執行完父類的靜態**塊,就會執行子類的靜態**塊,執行完子類的靜態**塊就會執行父類的構造**塊,然後再執行構造方法,執行完父類的構造方法,就會在子類執行相同的操作。

4、q:為什麼會先執行構造**塊,再執行構造方法?

a:因為構造**塊是初始化所有的物件的,而構造方法是初始化對應的物件的,比如 zi() 只是用於zi物件的初始化。

5、q:為什麼會先執行靜態**塊,然後再執行構造**塊?

a:因為靜態**塊是初始化類的,構造**塊是初始化物件的,類一旦載入就會執行靜態**塊,物件一旦建立就會執行構造**塊。

題目三:

class a

}class b

}class text extends a

public static void main(string args)

}

執行順序:

1、main函式入口,執行new text(),jvm為其開闢空間,然後初始化步驟如下:

2、原本是首先初始化text類的,但是因為text類有繼承關係,所以首先對父類a進行初始化,首先對父類的成員變數進行初始化,執行new b(),也同時執行b類的構造方法,列印內容。然後才執行a類的構造方法,列印內容。最後,父類才初始化完成。

3、然後到text子類進行初始化工作。首先執行new b(),同時執行b的構造方法,然後再往下指向,執行text的構造方法,最後,初始化完成,程式停止。

C 多型繼承相關面試題

一 相關概念 類的編譯順序 類名 成員名 成員方法體 類的構造順序 成員物件 類物件 子類的構造 父類 子類 子類的析構 子類 父類 過載 函式名相同 引數列表不同 作用域相同 隱藏 子類隱藏父類中同名的成員方法 覆蓋 子類覆蓋父類中相同的許成員方法 動多型 繼承中的多型 執行時期決定的多型 靜多型...

面試題相關

一些位址 osi七層功能及協議 資料鏈路層是如何定址的?傳送方 已知接收方ip arp 接收方mac位址 交換機尋找該mac位址所在埠,把幀往這個埠 mac通過rarp轉為ip位址。可靠通訊是靠哪一層來完成的?網路層 tcp協議 100base t 100mbps,baseband,雙絞線對。簡而言...

java面試題 有關於繼承的面試題

面試題 1,方法過載和方法重寫的區別?方法過載能否改變返回值型別?方法過載是在本類內方法的定義一樣,引數型別,引數個數不同,返回值型別不同 方法重寫是指子類的方法定義和父類的方法定義相同。其引數型別,引數個數,返回值型別都必須相同 方法過載能否改變返回值型別,因為與返回值無關。2,this與supe...