class A{int x,y;A(){x=100;y=200;}A(int x,int y){this.x=x;this.y=y;}}class B extends A{int z;B(int x,int y){super(x,y);z=300;}B(){z=800;}public void f(){System.out.printf("x=%d,y=%d,z=%d\n",x,y,z);}}class Example{public static void main(String arg[]){B b1=new B(10,20);b1.f();B b2=new B();b2.f();}}輸出結(jié)果是x=10,y=20,z=300x=100,y=200,z=800第二組結(jié)果沒有問題 想問下第一組結(jié)果為什么z的數(shù)值是300,我的理解是在第一次調(diào)用b1.f()的時候并沒有經(jīng)過z=300的語句 而是直接調(diào)用與第二組相同的z值 不知道哪里理解有誤 請高手解答下 謝謝..
2 回答

30秒到達戰(zhàn)場
TA貢獻1828條經(jīng)驗 獲得超6個贊
B(int x,int y)
{
super(x,y);
z=300;
}
你這個構(gòu)造方法已經(jīng)對z進行初始化了啊

守著星空守著你
TA貢獻1799條經(jīng)驗 獲得超8個贊
這兩種new構(gòu)建的對象實例是不同的,是采用不同的構(gòu)造函數(shù)new出來的。
1、B b1=new B(10,20);這個是使用B(int x,int y)這個有參數(shù)的構(gòu)造函數(shù)來構(gòu)建對象實例b1,而B(int x,int y)這個構(gòu)造函數(shù)又調(diào)用父類的有參數(shù)的構(gòu)造函數(shù)A(int x,int y)(因為super(x,y);)并令z=300。
2、B b2=new B();這個是使用B()這個無參數(shù)的構(gòu)造函數(shù)來構(gòu)建對象實例b2,這個無參數(shù)構(gòu)造函數(shù)初始化z=800。
添加回答
舉報
0/150
提交
取消