Topic: 为什么这个程序的执行结果是0,4,3?! |
Print this page |
1.为什么这个程序的执行结果是0,4,3?! | Copy to clipboard |
Posted by: allmylove Posted on: 2005-10-19 04:51 class A { public void m() { } public A() { m(); } } class B extends A { private int f = 4; public void m() { System.out.println ( f ); } public B() { m(); f = 3; m(); } } public class Init { public static void main(String[] args) { B b = new B(); } } JAVA中CALL 默认的CONTRATOR都要CALL SUPER一次吗? |
2.Re:为什么这个程序的执行结果是0,4,3?! [Re: allmylove] | Copy to clipboard |
Posted by: hxz5830 Posted on: 2005-10-19 08:55 class A { public void m() { } public A() { m();//被B类中m()覆盖,调用的是B类中m();B类中f尚没初始化,默认0;故第一个结果为0 } } class B extends A { private int f = 4; public void m() { System.out.println ( f ); } public B() { m(); f = 3;//局部变量覆盖类变量; 对不起,说错了 应该是类变量f重新赋值 m(); } } public class Init { public static void main(String[] args) { B b = new B();//首先调用父类构造函数 } } JAVA中CALL 默认的CONTRATOR都要CALL SUPER一次吗? |
3.Re:为什么这个程序的执行结果是0,4,3?! [Re: hxz5830] | Copy to clipboard |
Posted by: allmylove Posted on: 2005-10-19 09:21 hxz5830 wrote: |
4.Re:为什么这个程序的执行结果是0,4,3?! [Re: allmylove] | Copy to clipboard |
Posted by: hxz5830 Posted on: 2005-10-19 09:40 父类构造函数不能覆盖和隐藏. 新建一个子类对象时,首先调用父类构造函数.这是子类对象的初始化顺序 |
5.Re:为什么这个程序的执行结果是0,4,3?! [Re: allmylove] | Copy to clipboard |
Posted by: allmylove Posted on: 2005-10-19 12:02 不胜感激,现在明白了!就是相当与1+1=2?规则 |
6.Re:为什么这个程序的执行结果是0,4,3?! [Re: allmylove] | Copy to clipboard |
Posted by: linjie1918 Posted on: 2005-10-19 22:30 谢谢,我现在也明白了。。。 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |