在Java继承中,我们可以通过子类对象访问父类属性,因为有一个用于实现继承的关键字extends
。但我的问题是我们只能通过该类对象引用访问任何类的非静态数据成员或方法,因此在继承的情况下我们创建子类对象并访问父属性,因此作为java规则我们可以访问任何DM(数据成员) )通过那个类对象只在这种情况下根据我的说法有两种可能性:
当继承发生时,所有数据成员或成员函数首先被复制到子范围,然后我们使用它们,因为现在它们是Child的属性,因此很容易访问,但在这种情况下,相同的DM和方法都在,子记忆以及父记忆。这不是一个好方法,因为如果我在父母中有100个属性,那么首先将100个属性复制到子内存然后使用。
由于我们隐式地创建了子对象,所以父类对象是由编译器生成的,并且所有父类方法都是通过该父类对象隐式调用的,但是根据我没有做到。在Java中继承的情况下,没有父对象的创建。你也可以通过在子类中打印ref以及在父类上都有相同的引用来检查这一点,因此不会创建父对象。
所以我的问题是,如何通过子对象访问父属性隐式地意味着它们是如何实现的,或者是否有任何第三种方法来实现java中使用的方法。
答案 0 :(得分:3)
就像“#34;延伸"暗示,子对象是父对象的扩展。换句话说,它包含父项的所有数据成员,以及子项添加的其他数据成员。如果父对象的内存布局是
PPPPPP
然后子对象看起来像这样:
PPPPPPCCCCC
当你考虑你的选项(2)时,你说:"没有创建父对象#34;的对象。这是真实和错误的同时。没有单独的父类实例,与您正在制作的子类的实例不同。但是,父实例确实作为子实例的PART存在,并且在子构造函数之前确实调用父CONSTRUCTOR来初始化该部分。