博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA-初步认识-第九章-继承-子父类中的构造函数-子类的实例化过程
阅读量:5323 次
发布时间:2019-06-14

本文共 1877 字,大约阅读时间需要 6 分钟。

一.

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

举例演示一下,

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

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

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

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

真实的情况如下,Zi()构造函数中,存在super();语句,可以对比之前的this(),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

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

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

实例化过程就是调用父类的空参数构造函数,这不一定的,但是由于继承的关系,调用父类构造函数是肯定的,但是可以调用空参数,也可以调用其他构造函数。这样一来,子类的实例化过程就不是必须的。

 

转载于:https://www.cnblogs.com/wsw-bk/p/7742642.html

你可能感兴趣的文章
linux的子进程调用exec( )系列函数
查看>>
MSChart的研究
查看>>
C# 索引器
查看>>
MySQLdb & pymsql
查看>>
zju 2744 回文字符 hdu 1544
查看>>
XmlDocument
查看>>
delphi 内嵌汇编例子
查看>>
SQL server 2012 安装SQL2012出现报错: 启用 Windows 功能 NetFx3 时出错
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
MATLAB作图方法与技巧(一)
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
Java IO编程全解(六)——4种I/O的对比与选型
查看>>
CentOS7安装CDH 第十一章:离线升级CDH版本
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
EasyAACEncoder海思/ARM平台优化G711、G726转AAC的CPU占用高问题
查看>>
HttpGet和HttpPost
查看>>
oc基本控件
查看>>
迷宫问题
查看>>