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

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

时间:2017-10-29 11:06:08      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:定义类   分享   子类   color   流程   main   alt   原因   初步   

一.

子父类中构造函数的特点。

举例演示一下,

技术分享

技术分享

类中不写构造函数,它里面也是有的。只是写出来,可以看的更清楚一些。

DOS结果显示比较特别,在有Zi run的情况下,还有Fu run的存在。按道理说,子类创建的对象,应该就是子类的内容,这里突然出现一个父类的内容。而且里面运算的时候,只涉及对象的初始化。

现在讨论为什么子类创建对象构造函数初始化时,会有父类的构造函数也有初始化,而且位于子类之前。

技术分享

由上面截图引发的思考,什么时候super()会出现?之前谈论的this,是为了区分本类和对象中重名的东西,super出现的原因是什么?
技术分享

真实的情况如下,Zi()构造函数中,存在super();语句,可以对比之前的this(),this()是指用this关键字加个括号来代表本类中的构造函数。相同的,用super关键字用来调用父类中的函数,super和this关键字很相似。

技术分享

正确的流程叙述一遍:main中先进行new zi(),在堆中开辟空间,分配地址值,默认初始化没有东西(因为没有成员变量)。接着进行构造初始化,就访问到Zi()了,这个Zi()进入内存后,里面就开始执行了。子类构造函数中有三句,super();System.out.println("zi run");和return;(return被影藏了)。→super();是隐式的,不写也存在。在这样的继承子类构造函数中,super是一定存在的(?)。return什么时候隐藏,或者应该在什么地方存在

有super()的存在,就指向了父类,Fu()构造函数就进栈了,因此就先输出Fun run这句话。然后再输出zi run,和运行return。

这里为什么super调用的是空参数构造函数?原因在于,万一父类中没有书写构造函数,那么它就是默认的构造函数,它就是一个空参数列表的函数。(解释挺奇怪的)

谁说父类构造函数里面一定是空参,里面添加了其他东西。DOS结果显示出错。子类有super();默认就是有空参的构造函数,这时父类中没有空参构造函数,就会失败。

技术分享

技术分享

这时候又引出,谁说定义类的时候,一定要写空参的构造函数?想写什么参数就写什么参数,想怎么构造初始化,就怎么构造初始化。这可以用super直接指定。那就意味着,在有参数列表的构造函数时,空参数的构造函数就不存在了

技术分享

构造函数覆盖不?

为什么没有覆盖?子类中的构造函数和父类中的构造函数能相同么?不可能。

注意:子父类中构造函数不能不在。

就继承而言,子类可以父类的很多的东西,但是父类的构造函数是继承不了的。只能通过super()来调用父类的构造函数,这个就叫做子类的实例化过程。

子类的实例化就是创建对象。

技术分享

这就是它的初始化过程。对于类的建立也需要初始化么?

现在又对子类中的构造函数进行了扩展,类中不止一个构造函数。这符合实际情况,不可能类中只有一个默认的构造函数。

技术分享

技术分享

技术分享

结果是什么呢?DOS显示的结果为A,D。这里是在强调实例化的存在。一定要注意影藏语句的存在,在实际的开发中很多是没有书写super()的。

还有一点要强调的是,如果父类中没有空参数构造函数(没有话,需要自己自定义一个空参数构造函数),子类的实例化过程就进行不下去,DOS就会报错。

空参数构造函数和默认构造函数。如果没有自定义空参数构造函数,那会不会有系统默认的构造函数存在,从而子类的实例化过程可以继续运行。

A

技术分享

技术分享

本例说明什么?当父类中定义了具有参数列表的构造参数时,空参数构造函数就不存在了。导致子类实例化的过程出错。

B

技术分享

技术分享

父类构造函数为空参数列表,和里面的执行语句不符合。

C

技术分享

技术分享

D

技术分享

本例说明父类在没有定义构造函数时,是存在一个空参数的默认构造函数的。

注意:子类的实例化过程是否一定要进行

 

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

标签:定义类   分享   子类   color   流程   main   alt   原因   初步   

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

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