关于继承的基础知识。该如何处理
关于继承的基础知识。。
我是这么理解的,在实例化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没有将这个变量变为自己的副本,它是和父类共用的,是同一个数据
- 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没有将这个变量变为自己的副本,它是和父类共用的,是同一个数据