java中類的繼承呼叫順序例子

2021-06-26 18:39:46 字數 1641 閱讀 2755

//定義父類a

class a

//定義非靜態塊

//定義構造方法

a()//定義成員變數

string name = "a的名字";

static int ii = 0;

//定義成員方法

void a1()

static void a2()

//定義內部類b(內部類也可以定義內部類,即內部類可多重巢狀)

class b

//定義b的內部類c

class c}}

}//定義a的子類d

class d extends a

d(int i)

}//定義d的子類e

class e extends d

e()void e1()

}//定義執行類f

class f}/*

執行結果為:

-----

a靜態塊

a2方法:靜態成員變數ii為:0;

-----

-----

d靜態塊

e靜態塊

a非靜態塊

a構造方法

d非靜態塊

d構造方法,i的值為7

e非靜態塊

e構造方法

-----

b構造方法

-----

c構造方法

-----

a非靜態塊

a構造方法

d非靜態塊

d構造方法,i的值為7

e非靜態塊

e構造方法

-----

a1方法:成員變數name為:a的名字;

-----

a非靜態塊

a構造方法

d非靜態塊

d構造方法,i的值為7

e非靜態塊

e構造方法

-----

e1方法

例子說明:(類的5種成員:**塊、構造方法、成員變數、成員方法、內部類)

1.產生新物件時類的成員呼叫順序:父類靜態**塊-子類靜態**塊-父類**塊-父類構造方法-子類非靜態**塊-子類構造方法

1.靜態**塊只呼叫一次,非靜態**塊每產生乙個新物件呼叫一次

2.產生新物件時會依次呼叫父類的**塊和構造方法

3.父類的內部類子類可以繼承(類的多型性)

2.類的內部類仍可以有內部類,即內部類可以巢狀

3.子類可以繼承父類(除了構造方法之外)的所有成員,即類的多型性

4.注意的問題:

注意1:e類呼叫a類的靜態方法a2()時,並沒有呼叫d類和e類的靜態**塊?說明子類(繼承)父類的靜態成員時並不是真的繼承,只是子類呼叫父類的靜態成員(多型性)

注意2:<?>可以推理:子類(繼承)父類的非靜態成員時也不是真的繼承,只是子類物件可以呼叫父類的非靜態成員(這應該就是類的多型性根本的原理:子類的例項化物件即是子類的物件又是父類的物件,呼叫子類中的成員時這個物件是子類的,呼叫父類的成員時這個物件是父類的,而不存在實際的繼承)

注意3:建立物件時子類靜態**塊比父類非靜態**塊先呼叫?而子類非靜態塊卻在父類構造方法後呼叫?說明靜態塊在依附於類,非靜態塊依附於物件;建立例項化物件時先產生類的靜態記憶體空間並執行靜態**塊,然後按父類子類順序依次產生物件的空間,父類的非靜態塊與構造方法一樣是通過super呼叫的

*/

Java 子類繼承父類呼叫順序

建立子類後的呼叫順序 構造器呼叫順序 多型this.method o super.method o this.method super o super.method super o 注意 如果某個方法是靜態的,那麼這個方法就不具有多型性。class a a public void fun publi...

Java繼承時的呼叫順序。

繼承時,我們往往會關注屬性和靜態屬性和構造方法之間的初始化順序是什麼樣的 答案是 先static 建立物件後 然後父類屬性,父類構造方法 最後子類屬性,子類構造方法。package beetle class insect static int x1 prt static insect.x1 init...

java 繼承類載入順序

package xu.jin class insect static static int print string str static int x1 print static insect class hello extends insect static public static void ...