码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA-初步认识-第九章-继承-子父类中的构造函数-子类的实例化过程-细节

时间:2017-10-29 11:15:12      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:需要   构造函数   问题   如何   基础   解释   描述   实例化   循环   

一.

现在要思考一下,为什么要有super(),为什么要访问父类。

技术分享

对于截图中的问题,进一步地扩展就是为什么要有子类的实例化?

子类继承了父类以后,就产生了关系,就具备了父类的一些属性和行为。

举个例子:

技术分享

截图中,父类里面定义了一些属性,并且用构造函数对属性进行了初始化。如果子类不访问父类,如果子类new对象的时候,只调用自己的,不访问父类的构造函数的时候,那么子类拿到的num值是0(首先,子类继承了父类的属性,接着属性没有经过父类的初始化的构造函数,最后结果为0)。这个就不合适了,因为父类本身对自己的属性进行了初始化,所以子类在拿父类东西的时候,先看看父类是如何对它自己的东西进行初始化的。你初始化结束了,我直接拿来就用。所以访问父类构造函数就变成了必须。

在子类进行初始化的时候,子类对象在内存空间一建立,父类的num和子类的num都会在内存空间中展现出来。那么它知道父类如何对num进行初始化的。

你拿人家东西,是不是先要看下,人家如何对自己的东西进行初始化的。这就是为什么子类必须访问父类构造函数的原因。

技术分享

为了完成这个必须的动作,就在子类的构造函数中加入了super(),语句。

技术分享

实例化过程的核心是super(),为什么会有实例化的出现?这个问题来源于,在子父类之间继承的基础上,利用子类创建了对象,在创建对象时要初始化。由于是继承关系,光子类初始化肯定不行,还必须有父类的初始化。这就解释了为什么会有子类的实例化过程和super()的存在。而且,super()语句可以直接定向化父类的哪一个构造函数的初始化。

这里出现一个小插曲,冲突也就随之而来。

以前在学习时,描述类中有this()的存在,不看父类的化,这样写是正确的。this()是在调用本类的Zi()构造函数初始化,现在问Zi(int x)构造函数内有super()么?

技术分享

以前this()是要放在第一行,现在讲到继承,super()也要放在第一行,那这是不是有冲突?

正确的说法就是,这里面没有super()。但是没有了super(),那么继承父类还有什么意义呢?

仔细看下面的截图,流程是这样的:先是new Zi(6),在新建对象时,要初始化。调用了Zi(int x),在这个构造函数里,第一句是this(),而且是没有super()语句的。由于this()的关系,在Zi(int x)初始化之前,我们先调用本类空参数的初始化,在Zi()的构造函数中,第一句就是super()。

技术分享

肯定有一个访问父类的,至少有一个,没有super()初始化不了。子类初始化没有父类的帮助,是不行的。

技术分享

看上面的截图,如果Zi()中有this(3),那它就没有super()语句了,只有this(3),好像子类中两个构造函数都没有super()语句。实际上,这么写是有问题的。新建对象时,调用Zi(int x)函数,Zi(int x)函数中执行this(),又调用Zi()初始化,Zi()中接着执行this(3),也就是回过头来调用Zi(int x)函数,这样就陷入了一个死循环。

这里有个问题,为什么Zi()中有this(3),就没有super()语句了?难道说this()和super()只能有一个位于句首、

技术分享

对于以继承关系发展起来的子父类,任何一个类中都会有下面截图中的隐式句子,隐式的默认函数,函数中有隐式的super()语句和renturn返回语句。

技术分享

构造函数也带着权限,如果类前面有public,即public class Demo{},那么构造函数里面也有public。类公有了,其构造函数也得公有出去。如果类没有public,那么里面也不需要public。

上面的截图中,有一个小疑问,Demo类没有继承,里面的构造函数哪来的super()语句呢?

java是面向对象语言,里面提供了n多对象,这些对象无论什么功能,只要是对象都进行抽取,最终抽取成一个名为object的类。你创建的任何对象都是object的子类,要么是直接的,要么是间接的。class Demo后面不写extends object,Demo也是object的子类。

技术分享

 

JAVA-初步认识-第九章-继承-子父类中的构造函数-子类的实例化过程-细节

标签:需要   构造函数   问题   如何   基础   解释   描述   实例化   循环   

原文地址:http://www.cnblogs.com/wsw-bk/p/7749383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!