访问子类对象的实例变量

子类的方法可以访问父类的实例变量,这是因为子类继承父类,就会获得父类的成员变量和成员方法,父类的方法不能访问子类的实例变量,因为父类根本无法知道它将被哪一个子类所继承,但是在极端情况下可能出现父类访问子类的情况。

class Base{
    //定义一个实例变量
    private int i=2;
    public Base(){
        this.play();
    }
    public void play(){
        System.out.println(i);
    }
}
class Derived extends Base{
    private int i=22;

    public Derived() {
        i=222;
        // TODO Auto-generated constructor stub
    }
    public void play(){
        System.out.println(i);
    }
}
public class BianDemo{
    public static void main(String[] args) {
        new Derived();
    }
}

此代码运行的结果为0,为了解释这个问题,首先要澄清一个概念,java对象是由构造器创建的吗?很多书籍或资料多会说是的,但是实际情况构造器只是负责对java对象实例变量进行初始化。在执行构造器代码之前,该对像所占内存已经被分配出来了,也就是说该对像的实例对象已经全都分配了内存空间了。
this.play();中我们指出当this在构造器中时,this代表正在初始化的java对象。此时的情况this位于Base类中但是这些代码其实是在Derived 类中执行的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容