高手请进,类继承中覆盖和未覆盖的实例变量的奇怪问题
同是实例变量,为什么效果不同?
public class Base{
String x = "base-x";//子类不覆盖
String y = "base-y";//子类覆盖
}
public class Sub extends Base
String y = "sub-y";//子类覆盖父类变量x
public Sub(){
System.out.println(super.x+":"+x);
this.x = "sub-x";//或者super.x = "sub-x";
System.out.println(super.x+":"+x);
System.out.println(super.y+":"+y);
}
public static void main(String[] args) {
new Sub();
}
}
最后效果是这样
不管用this还是super改x,父类和子类的x同时改变!
但是y不是这样,父类子类的y改变哪个就变哪个
难道在变量不覆盖的情况下,父类子类共享同一个变量????????????
此外,我知道在new子类的时候,会依次初始化父类显式赋值的实例变量,
父类构造函数,然后是子类的
是不是java后台在new子类的同时也new了一个父类,然后用super引用?