zoukankan      html  css  js  c++  java
  • 关于继承中的super()调用父类构造方法

    super

    super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。

    每当你new一个子类对象的时候,子类对象都隐式内置了一个父类对象。
    所以说,为了那个内置的父类对象,也需要进行初始化。

    因为这个父类对象需要初始化,所以必须调用构造方法进行初始化,什么时候调用构造方法呢?

    在子类的构造方法里面调用super,如果父类中含有无参构造方法,子类构造方法会隐式调用了一句super(),因此对于无参构造函数,super()可写,可不写,

    如果父类里面没有定义参数为空的构造函数,那么必须在子类的构造函数的第一行显示的调用super(参数);语句调用父类当中其它的构造函数。

    子类对象调用父类方法

    当一个类继承于另一个类,子类中没有父类的方法时。用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找。
    当一个方法只在父类中定义时,调用该方法时会使用父类中的属性。 
    如果该方法中又调用了其他方法,那么还是按照之前的顺序,先在子类中查找,再在父类中查找。

    1、为什么在实例化子类的对象的时候会调用先调用父类的构造函数?

    答:因为子类继承父类之后,获取到了父类的内容(属性/字段),而这些内容在使用之前必须先初始化,所以必须先调用父类的构造函数进行内容的初始化.

    2、在什么地方调用基类的构造函数?

    答:在子类的构造函数中,如果无参数,的第一行会隐士的调用 super();子句,即调用了父类的构造函数

    如果父类里面没有定义参数为空的构造函数,那么必须在子类的构造函数的第一行显示的调用super(参数);语句调用父类当中其它的构造函数.

    如果子类当中的构造函数的第一行写了this();那么就隐士的那个super();语句就会消失..因为super()和this()都只能定义在构造函数的第一行.

  • 相关阅读:
    C#实现注册码
    多表链接 Left join
    Repeater 一行显示两列数据
    Repeater一行显示数据库中多行表记录
    HP QC(Quality Center)在Windows 7 IE8 IE9下不能工作解决方案
    Android应用换肤总结
    Lua 第一个应用程序 Hello World
    JNI 技术与 Android 应用
    NSAutoreleasePool' is unavailable: not avail
    1-2基础控件
  • 原文地址:https://www.cnblogs.com/alsf/p/9286821.html
Copyright © 2011-2022 走看看