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


    一.

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

    举例演示一下,

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

    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

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

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

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

  • 相关阅读:
    了解大数据的特点、来源与数据呈现方式
    结对项目
    第四次作业
    阅读《构建之法》1-5章有感
    iOS 应用如何完全支持 IPv6-ONLY 网络?
    丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0
    ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)
    推荐一款跨平台的 Azure Storage Explorer
    更改 Skype for Business Online 的 Sip 地址以匹配UPN
    C# 计算字符串在控制台中的显示长度
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/7742642.html
Copyright © 2020-2023  润新知