黑马程序员技术交流社区
标题:
子类构造函数
[打印本页]
作者:
漪顿
时间:
2013-8-15 13:47
标题:
子类构造函数
子类构造函数的第一行都有一条隐式的super()。父类的构造函数,是给父类对象初始化的,子类再给父类初始化是不是可以理解成子类中有了一个父类对象呢?
作者:
yangxin540
时间:
2013-8-15 15:12
这问题值得考究,但是我认为是没有的,因为创建对象调用构造函数初始化,而这里super也调用了构造函数,也对数据进行了初始化。所以是没有的
作者:
漪顿
时间:
2013-8-15 15:21
哦还是不太明白
作者:
曹满林
时间:
2013-8-15 15:39
这个我个人的理解是这样的,子类具有父类的特性,其实去父类那初始化,是对子类部分属性的初始化吧!不知道理解是否正确
作者:
panningwjr
时间:
2013-8-15 15:42
漪顿 发表于 2013-8-15 15:21
哦还是不太明白
其实要刨根问底的话,创键对象是在new的时候内存分配空间时创建的,
大部分时候,程序是通过new关键字来为java对象申请空间,然后通过构造器来初始化对象,所以事实上构造器只负责初始化对象。
有的情况创建类是不用构造函数的。
如:通过反序列化恢复java对象(
就是将java对象保存到本地文件中,再通过读取本地文件从而读取java对象
)
// 将对象写入硬盘中
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
"F:\\3\\object1.txt"));
Person p = new Person("zhangsan");
oos.writeObject(p);
oos.flush();
// 从硬盘中读取对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
"F:\\3\\object1.txt"));
Person p1 = (Person) ois.readObject();
复制代码
所以我觉得子类创建对象调用父类构造器是为了给子类初始化(子类继承了父类的属性和方法,也需要初始化),并没有创建父类对象。
以上是个人看法,有错希望大家指出来一起学习。
作者:
yangxin540
时间:
2013-8-15 15:43
漪顿 发表于 2013-8-15 15:21
哦还是不太明白
就是说呀,调用构造函数就是为了初始化数据,而构造函数一被调用,初始化数据也就完成,子类是通过super调用的父类构造函数而实现的初始化数据,所以没有在子类中产生父类对象。
作者:
清心玉质
时间:
2013-8-15 15:55
没看明白,子类怎么能给父类初始化?难道是 Cat c = new Animal()?这是行不通的啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2