你的分享就是我们的动力 ---﹥

Java 子类不写构造方法,但在main中调用该子类的构造方法能怎样

Java 子类不写构造方法,但在main中调用该子类的构造方法会怎样
public class test2 {
public static void main(String[] args){
new Sub();
}
static class Super{
int a=5;
public Super(){
test();
}
public void test(){
System.out.println(a);
}
}
static class Sub extends Super{
int a=6;
public void test(){
System.out.println(a);
}
}

}

为什么结果是0呢?
子类没有构造方法,所以要从父类找,这时a是有值的啊
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

1. new Sub() 会先调用父类的构造器,而你的子类里面重写了这个TES() 方法,所以在调用父类构造器的时候调用的是子类的TEST()方法,但是此时子类的域a刚刚被初始化,还没有被赋值,所以显示的是默认的0, 如果你把 INT A 边做 STATIC INT A = 6 就没事儿了


为什么子类的域a没有被赋值呢?


因为子类的构造器还没有调用到啊


主函数里的Sub()不算,是因为子类没有这个构造器,所以实际调用的是父类的构造器是吗


如果一个类里面没有定义构造器,编译器会自动为你加一个
SUB(){
 SUPER();
}