class A
{
A()
{ this.test(); }
void test()
{
System.out.println("aa");
}
}
class B extends A
{
int i=10; void test()
{
System.out.println(i);
}
}
public class TestA
{
public static void main(String[] args)
{
A a=new B();
}
}
这个输出的结果是0;
搞不懂这个0是怎么来的?为什么不是输出B中的10呢?
在线等啊!!
{
A()
{ this.test(); }
void test()
{
System.out.println("aa");
}
}
class B extends A
{
int i=10; void test()
{
System.out.println(i);
}
}
public class TestA
{
public static void main(String[] args)
{
A a=new B();
B b = new B();
}
}
引用父类方法,那i是在子类中声明的啊,没报错,能找到i,那i怎么讲?在子类中的i,也能在父类中调用?
{
int i=10;
A()
{ this.test(); }
void test()
{
System.out.println("aa");
}
}
class B extends A
{
//int i=10; void test()
{
System.out.println(i);
}
}
public class TestA
{
public static void main(String[] args)
{
A a=new B();
}
}
这就可以输出10了,原理楼上几位说的已经够了
初始化,但编译器会将域置零的,i的值即为零,所以最终输出的结果是零
http://www.pkwutai.cn
我感觉这个同学说的不对,建议大家 把 jvm装载 连接 初始化类的过程搞清楚,其中的clinit()和init()方法在什么时间调用搞清楚!
static是在类加载的时候就初始化了。
也是0,何解
先执行static 中的,然后执行其它,所以结果是88
9楼写的顺序并不是全部正确的!
因为B类继承了A类,所以虚拟机还是调用的A类中的构造方法!