日期:2014-05-20  浏览次数:20660 次

关于继承的基础知识。。
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没有将这个变量变为自己的副本,它是和父类共用的,是同一个数据