当前位置: 代码迷 >> Java相关 >> 关于继承的基础知识。该如何处理
  详细解决方案

关于继承的基础知识。该如何处理

热度:6227   发布时间:2013-02-25 21:46:28.0
关于继承的基础知识。。
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没有将这个变量变为自己的副本,它是和父类共用的,是同一个数据
  相关解决方案