首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

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

2012-05-01 
关于继承的基础知识。。Java codepublic class Base {//父类protected int iVar0}class Sub extends Base{

关于继承的基础知识。。

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没有将这个变量变为自己的副本,它是和父类共用的,是同一个数据

热点排行