我改成这样了,为什么他还是会输出零啊,是不是一定会输出零的啊??
abstract class Exam4 {
int j=3;
Exam4()
{
print();
{
System.out.println(j);
}
}
abstract void print();
}
public class Exam4Sub extends Exam4{
int i=1;
void print()
{
System.out.println(i);
}
public static void main(String[] args) {
Exam4Sub e=new Exam4Sub();
e.print();
}
}
----------------解决方案--------------------------------------------------------
当然
除非你把子类的i去掉,子类的的print也去掉
----------------解决方案--------------------------------------------------------
System.out.println(i);
你把这里改下System.out.print(i); println是有换行的
----------------解决方案--------------------------------------------------------
版主,能不能把整个过程说一下啊
----------------解决方案--------------------------------------------------------
abstract class Exam4 {
int j=3;
Exam4()
{
print();
}
abstract void print();{
System.out.println(j);
}
}
public class Exam4Sub extends Exam4{
int i=1;
void print()
{
System.out.println(i);
}
public static void main(String[] args) {
Exam4Sub e=new Exam4Sub();
e.print();
}
}
这个程序输出的为什么是3,0,1
----------------解决方案--------------------------------------------------------
i和j不一样
----------------解决方案--------------------------------------------------------
首先继承父类,在父类中你用了System.out.println(j),所以输出3
再次子类定义父类的抽象类,System.out.println(i),但是这时候Exam4Sub()还没有实例化,所以i值初始化为0
最后Exam4Sub e=new Exam4Sub()实例化对象,i值为1,所以输出1
----------------解决方案--------------------------------------------------------
或许你说得很明白,可是我还是不懂啊?能不能说一下原理啊,谢谢
----------------解决方案--------------------------------------------------------
WestNet已经说得很清楚了,还不懂话,就没有办法了
你首先要清楚JAVA类的初始化顺序
----------------解决方案--------------------------------------------------------
顺序是这样的:
1.首先继承父类,在父类中你用了System.out.println(j),所以输出3
2.在你的Exam4Sub 还没有实例化时!System.out.println(i);所以输出0
3.在你new Exam4Sub();的时候!i比赋值为1,System.out.println(i);所以输出1
----------------解决方案--------------------------------------------------------