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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 漪顿 中级黑马   /  2013-8-15 13:47  /  1590 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

子类构造函数的第一行都有一条隐式的super()。父类的构造函数,是给父类对象初始化的,子类再给父类初始化是不是可以理解成子类中有了一个父类对象呢?

6 个回复

倒序浏览
这问题值得考究,但是我认为是没有的,因为创建对象调用构造函数初始化,而这里super也调用了构造函数,也对数据进行了初始化。所以是没有的
回复 使用道具 举报
哦还是不太明白
回复 使用道具 举报
这个我个人的理解是这样的,子类具有父类的特性,其实去父类那初始化,是对子类部分属性的初始化吧!不知道理解是否正确
回复 使用道具 举报
漪顿 发表于 2013-8-15 15:21
哦还是不太明白

其实要刨根问底的话,创键对象是在new的时候内存分配空间时创建的,大部分时候,程序是通过new关键字来为java对象申请空间,然后通过构造器来初始化对象,所以事实上构造器只负责初始化对象。有的情况创建类是不用构造函数的。

如:通过反序列化恢复java对象(就是将java对象保存到本地文件中,再通过读取本地文件从而读取java对象
  1. // 将对象写入硬盘中  
  2.         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(  
  3.                 "F:\\3\\object1.txt"));  
  4.         Person p = new Person("zhangsan");  
  5.         oos.writeObject(p);  
  6.         oos.flush();  
  7.         // 从硬盘中读取对象  
  8.         ObjectInputStream ois = new ObjectInputStream(new FileInputStream(  
  9.                 "F:\\3\\object1.txt"));  
  10.         Person p1 = (Person) ois.readObject();  
复制代码
所以我觉得子类创建对象调用父类构造器是为了给子类初始化(子类继承了父类的属性和方法,也需要初始化),并没有创建父类对象。
以上是个人看法,有错希望大家指出来一起学习。



评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1 很给力!

查看全部评分

回复 使用道具 举报
漪顿 发表于 2013-8-15 15:21
哦还是不太明白

就是说呀,调用构造函数就是为了初始化数据,而构造函数一被调用,初始化数据也就完成,子类是通过super调用的父类构造函数而实现的初始化数据,所以没有在子类中产生父类对象。
回复 使用道具 举报
没看明白,子类怎么能给父类初始化?难道是 Cat c = new Animal()?这是行不通的啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马