java中public class A2Demo {
public static void main(String[] args) {
new Koo();
}
}
class Foo {
int i=10;
int j=10;
public Foo(){
this.test();
}
public void test(){
System.out.println("foo");
}
}
class Koo extends Foo{
int i=3 ;
public void test(){
System.out.println(i);
System.out.println(j);
}
}这代码中,为什么会输出 0 10 呢,为什么i就是0,j就可输出值呢,
解决方案 »
- 在对ArreyList递归遍历时执行Iterator.remove()抛出了ConcurrentModificationException??
- 我想用JSP+ORACLE开发网站,不知用什么开发工具较好,请各位大侠指点,谢谢.
- 看过Think in java(4th edtion)的请进
- [急问]JNI调用 VC动态库 时出现的问题
- 完全郁闷中!!!!
- ¥¥¥¥¥¥《Java TCP/IP应用开发详解》一书的一个关于UDP的例子!好几个问题呀!
- 一个有关传值\传址的问题.有奇怪.
- 以前的方法不管用!!!奇怪 乱码问题 ,不是简单的 .getBytes("iso8859_1"),"gb2312" 能解决的
- 这是什么问题?-菜鸟级!
- org.apache.xerces.parsers.DOMParser 丢失是怎么回事呀,六个jar文件我都导入了呀(jaxp,ibm)
- 没有循环语句,没有递归,出现死循环
- 各位大侠、 请问下、怎么在Eclipse中快速的删除不同的字符?
1 初始化子类对象时,先给子类的属性开辟空间(赋默认值,int型是0,即 i=0).
2 执行子类的构造函数(这里是默认的)之前,向上追溯其父类。在执行其父类构造函数之前,先给父类属性开辟空间并赋默认值,即父类的i=0,j=0.
3 再向上追溯其父类,此例即为 Object,执行Object构造函数。
4 再从Object返回来,在父类里,给属性显示赋值,i=10,j=10.
5 执行父类构造函数,test(), 但test()在子类重写了,所以执行的是子类的test()方法。输出的i是子类的i=0,j是继承父类的j,j=10. 输出结果就是这么来的。
6 父类构造函数执行完后,回到子类继续初始化,给属性i显示赋值3,即i=3.
7 执行子类的构造函数,(此例为默认的,不做任何事情)。初始化结束。供楼主参考。
可以看看:
http://wenwen.soso.com/z/q191435823.htm
java类的初始化顺序是:静态-> 父类成员变量 -> 父类构造函数 -> 子类成员变量 -> 子类构造函数。所以上面代码的执行顺序是: foo.i -> foo.j -> foo() -> koo.test() -> koo.i。test()是动态绑定的,因为方法也可以算静态的,所以已经可以绑定到koo.test()了。在koo.test()调用的时候调用的是koo.i,但是这时候koo.i还没有初始化,只有默认初始值0。