首页 新闻 赞助 找找看

实例化子类的时候是否内存中也实例化了一个父类的对象?

0
悬赏园豆:50 [待解决问题]

在使用new来实例化一个子类的时候是否同时也实例化了一个父类的对象?如果是,哪子类怎么指向它的父类对象?(通过那个指针?),如果不是,那就是JVM在为该子类分配内存的时候已经获得所有父类的所有变量,它是怎么获取的?

注:动JVM的角度来说明!

请大神们不吝赐教……

禅楼望月的主页 禅楼望月 | 初学一级 | 园豆:153
提问于:2015-03-07 20:05
< >
分享
所有回答(3)
0

不是这样的。实例化子类的时候,因为有集成关键字,才会集成父类的相关属性,在创建实例的时候,由于代码是提前加载好的!加载子类代码的时候,父类代码也是加载了的!就会依据需要进行父类的属性的加载和创建。实例是一份数据存储而已,是按照子类的定义,存储的相应形式的数据。

矢风快乐 | 园豆:183 (初学一级) | 2015-03-09 16:45
0

1,实例化子类不会去自动实例化父类,因为父类有可能是抽象类,抽象类是不能被实例化的

2,不是获得父类的变量,而是子类自己的变量了,你可以创两个不一样的子类,父类的字段给不一样的值都可以,说明这个字段实在子类中单独实例化

类的继承只是一个定义方式,或者说是一种设计模式,恐怕你要加强面向对象概念性的学习

茂茂 | 园豆:2892 (老鸟四级) | 2015-03-09 17:50

您好,你说的是语言层面上的,我是想知道,子类在实例化的时候是通过什么机制来拿到父类中的变量,是直接解析父类中的字段表集合吗?那就是new关键字的内部机制了。

支持(0) 反对(0) 禅楼望月 | 园豆:153 (初学一级) | 2015-03-09 18:14

我觉得你没有理解楼主的含义,回答的不准确,另外,

1、实例化子类的时候首先调用父类的构造函数

2、正如楼主所说,如果是通过指针指向各自父类,父类各自实例化,父类的字段也是不同的,你的证明没有任何意义。

支持(0) 反对(0) 张雨田 | 园豆:204 (菜鸟二级) | 2015-10-21 08:34
0

根据目前理解回答:
类继承只是定义子类有哪些成员,在实例化的时候其实是实例化定义好的成员列表,下面代码父类构造器调用了this.print(),说明与子类是同一个this,即实例化的时候不分子类父类,是内存中的一份实例化数据:

abstract class C {
public C() {
this.print();
}
public abstract void print();
}

class B extends C {
private int x = 100;
public B(int x) {
this.x = x;
}
public void print() {
System.out.println("x=" + x);
}
}
public class TestJava {
public static void main(String[] args) {
C c = new B(10);
}
}

输出结果:0
PS:真正在JVM层的深入理解解释,需要继续阅读相关文章。

张雨田 | 园豆:204 (菜鸟二级) | 2015-10-21 08:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册