A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

关于创建子类对象时父类对象是否会自动创建呢?

以下说法纯属个人意见,不知道对不对,如果不对还请大神指教。

我觉得是父类的对象也被创建了。
例如class B extends A{},当执行代码new B()时,即当创建子类对象时,父类构造函数被调用用于初始化父类的属性,
这个时候我觉得在堆内存中产生了一个子类对象,而在子类对象里面包含了父类对象。

为什么这么说呢?
当我们执行B b = new B();的时候,子类引用b可以访问子类和父类所有的属性和方法(即A类和B类中的属性和方法,这里排除私有成员),
此时我的理解是这样的,因为子类对象中包含了父类对象,所以子类引用a可以访问子类和父类所有的属性和方法。
当我们执行A a = new B();的时候,父类引用a可以访问父类自己的属性和方法或者子类重写父类后的方法,但是父类引用a却不能访问子类
新增加的属性和方法,我的理解是,因为子类对象中包含了父类对象,而此时父类引用a只是指向了子类对象中的父类对象,屏蔽了父类对象
外面的属性,所以不能访问子类新增加的属性和方法。

以上仅是个人的一点理解,不知道正确是否,求大神指教!!

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览
创建子类对象后,并不会自动创建父类对象。java语言不会自动创建对象,A a = new B();这个是多态,父类类型指向子类对象,对于常见的非静态方法,如果B中有A没有的方法,就是B特有的方法,用a调用是编译出错的,因为A没有。如果B复写了A的方法,这时调用的是,子类复写的方法。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
这个说法我不同意,如果父类要是abstract的呢?怎么建立对象。
我感觉子类在创建对象的时候只继承了父类的成员属性和方法,再说了,建立这个父类对象一点儿意义也没有啊还占用空间。
回复 使用道具 举报

子类中所有的构造函数默认都会访问父类中空参数的构造函数;
因为每一个构造函数的第一行都有一条默认的语句super();
子类会具备父类中的数据,所以要先明确父类是如何对这些数据初始化的;
当父类中没有空参数的构造函数时,子类的构造函数必须通过this或者super语句指定要访问的构造函数;
父类对象没有产生,子类继承父类,连父类的构造函数也一起继承了。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
A a = new B();多态的体现。        父类的引用指向了自己的子类对象。父类的引用也可以接收自己的子类对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马