关于继承的基础知识。。
Java code
public class Base { //父类
protected int iVar=0;
}
class Sub extends Base{ //子类
void method(){
super.iVar=1; //第7行
System.out.println(this.iVar); //第八行
}
public static void main(String[] args){
new Sub().method(); //打印输出 1
}
}
我是这么理解的,在实例化Sub类的时候会调用Base类构造方法,所以Base类的iVar默认为0,子方法这时候继承了Base类的iVar(值为0)的这个变量,将这个变量纳为自己的副本,第7行只是改变了Base类的iVar值为1,并不影响Sub实例的iVar,但为什么打印结果是1,而不是0,求高手指正!!
------解决方案--------------------但是你的Sub中没有iVar这个变量,所以是集成父类的iVar。而之前你也赋值了1,所以打印为1
------解决方案--------------------创建子对象时,它会在其中包含了基础类的一个对象,它们共享同一个数据,所以这里的super.iVar跟this.iVar其实都是同一个数据,所以会输出1,但是如果在子类也声明了iVar,那么this.iVar是指向的自己的。
------解决方案--------------------“将这个变量纳为自己的副本”——sub没有将这个变量变为自己的副本,它是和父类共用的,是同一个数据