當前位置:才華齋>IT認證>SUN認證>

sun認證考試:java子物件建立過程

SUN認證 閱讀(2.3W)

Java 建立子類物件的過程:

sun認證考試:java子物件建立過程

public class F511

{

private int ff=100;

protected int m=880;

F511()

{

m=add(8);

}

int add(int i){

return i+m;

}

public static void main(String args[]){

F511 f=new F511();

tln("f="+f.m);

S511 s=new S511();

tln("s="+s.m+" t= "+s.t);

}

}

class S511 extends F511

{

protected int ss=111;

S511(){

m+=ss;

t=add(9);

}

int add(int i){

return i*ss;

}

}

大家自己先分析一下運算後的結果,然後在看下面結果:

答案是:f=888

m=111

通過這個例子可以很好的學習到java繼承父類,執行的先後順序和機制。

現在我新增一下東西到程式中,方便我們分析:

public class F511

{

private int ff=100;

protected int m=880;

protected int t=880;

static int k=0;

F511()

{

tln("this is parents = "+m);

m=add(8);

tln("this is parents m=add(8) = "+m);

}

int add(int i){

tln("k= "+k);

k++;

return i+m;

}

public static void main(String args[]){

F511 f=new F511();

tln("f="+f.m);

S511 s=new S511();

tln("s="+s.m+" t= "+s.t);

}

}

class S511 extends F511

{

protected int ss=111;

static int j=0;

S511(){

tln("this in childe print parents = "+m);

m+=ss;

t=add(9);

}

int add(int i){

tln("j= "+j);

j++;

tln("ss= "+ss);

return i*ss;

}

}

執行結果是:

this is parents = 880

k= 0

this is parents m=add(8) = 888

f=888

this is parents = 880

j= 0

ss= 0

this is parents m=add(8) = 0

this in childe print parents = 0

j= 1

ss= 111

s=111 t= 999

輸出完成 (耗時 0 秒) - 正常終止

從這裡可以看出,子類繼承父類後。在建立子類物件時,首先初始化父類的`無參建構函式F511()執行其中的方法。由於父類無參構造方法中add()方法被子類重寫了,因此父類呼叫子類的add()方法,這就是為什麼會輸出j=0,又由於父類中沒有ss變數,所以ss預設就為0.所以父類初始化後,m=0了。然後才在初始化子類無參建構函式S511()。由於m變成了0,所m+=ss,就為111了。這就是建立子類,函式初始化的過程。

所以,在構造器中有應避免呼叫可能被改寫的方法,不然上上面會出現某些意想不到的結果。