关于创建子类对象时父类对象是否会自动创建呢?
以下说法纯属个人意见,不知道对不对,如果不对还请大神指教。
我觉得是父类的对象也被创建了。
例如class B extends A{},当执行代码new B()时,即当创建子类对象时,父类构造函数被调用用于初始化父类的属性,
这个时候我觉得在堆内存中产生了一个子类对象,而在子类对象里面包含了父类对象。
为什么这么说呢?
当我们执行B b = new B();的时候,子类引用b可以访问子类和父类所有的属性和方法(即A类和B类中的属性和方法,这里排除私有成员),
此时我的理解是这样的,因为子类对象中包含了父类对象,所以子类引用a可以访问子类和父类所有的属性和方法。
当我们执行A a = new B();的时候,父类引用a可以访问父类自己的属性和方法或者子类重写父类后的方法,但是父类引用a却不能访问子类
新增加的属性和方法,我的理解是,因为子类对象中包含了父类对象,而此时父类引用a只是指向了子类对象中的父类对象,屏蔽了父类对象
外面的属性,所以不能访问子类新增加的属性和方法。
以上仅是个人的一点理解,不知道正确是否,求大神指教!!
|