java面試題1 繼承 看程式寫結果

2021-07-15 17:45:42 字數 1791 閱讀 2642

本題考查的內容:

a:成員變數 就近原則

b:this和super的問題

this訪問本類的成員

super訪問父類的成員

c:子類構造方法執行前預設先執行父類的無參構造方法

d:乙個類的初始化過程

成員變數初始化

預設初始化

顯式初始化

構造方法初始化

class

fu }

class

ziextends

fu public void show()

}class extendstest

}

結果:

fuzi

3020

10

a:乙個類的靜態**塊,構造**塊,構造方法的執行流程

靜態**塊 > 構造**塊 > 構造方法

b:靜態的內容是隨著類的載入而載入

靜態**塊的內容會優先執行

c:子類初始化之前先會進行父類的初始化

class

fu

public fu()

}class

ziextends

fu

public zi()

}class extendstest2

}

結果是:

靜態**塊fu

靜態**塊zi

構造**塊fu

構造方法fu

構造**塊zi

構造方法zi

看程式寫結果:

a:成員變數的問題

int x = 10; //成員變數是基本型別

student s = new student(); //成員變數是引用型別

b:乙個類的初始化過程

**成員變數的初始化

預設初始化

顯示初始化

構造方法初始化**

c:子父類的初始化(分層初始化)

先進行父類初始化,然後進行子類初始化。

classx }

classy }

public

class

zextends

x public

static void main(string args)

}

解釋:這裡的super()僅僅是用來佔位的,實際上,必須是嚴格按照分層初始化的過程:

1.先初始化父類x的成員變數,即初始化成員變數y,列印出:y

2.初始化父類x的構造方法,列印出:x

3.父類初始化完成之後,初始化子類z,先初始化子類的成員變數y,列印出:y

4.接著初始化子類z的構造方法,列印出:z

可以看出,super()在這裡不影響初始化的順序

結果:

yxyz

問題:

雖然子類中構造方法預設有乙個super()

初始化的時候,不是按照那個順序進行的。

而是按照分層初始化進行的。

它僅僅表示要先初始化父類資料再初始化子類資料,不受其他條件的制約。

從面試題看繼承

創新工場一道面試題,發現對類繼承裡面的東東還不是特別清晰,梳理一下 class a int getvalue class b public a int getvalue int main class a class b a class c b class d public x,public c 下面...

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

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

java執行緒面試題1

子執行緒迴圈 10次,接著主線程迴圈 100,接著又回到子執行緒迴圈 10次,接著再回到主線程又迴圈 100,如此迴圈 50次,請寫出程式。備註 不可能一上來就寫出上面的完整 最初寫出來的 如下,問題在於兩個執行緒的 要參照同乙個變數,即這兩個執行緒的 要共享資料,所以,把這兩個執行緒的執行 搬到同...