美文网首页
JAVA_super() 与 this() 必须放在构造函数第一

JAVA_super() 与 this() 必须放在构造函数第一

作者: Shokka | 来源:发表于2018-08-21 09:45 被阅读0次
    super()

    调用父类的无参构造函数,当在子类构造函数中调用时必须放在第一行,原因如下:
    1.编译器检测子类构造函数第一行没有显示调用父类构造函数时,默认加上一句super(),而如果此时你恰好在第二行(只要不是第一行)调用了super,此时你对父类进行了两次初始化,先不说一个实例能否被初始化两次,多次初始化已经造成了资源的浪费。假如这是三级继承关系,而第二层的无参构造函数也调用了两次super,这时第一层的父类就会被调用四次,以此类推多级继承该有多浪费资源。
    2.子类的构造函数可能会使用到父类的属性,如果父类不在第一行初始化,子类可能会调用出错。

    this()

    调用本类的其他构造函数
    原因与super类似,没有第二点

    super与this无法同时存在

    this构造函数中,无论显示隐示,肯定会调用父类的构造方法,当super与this同时存在时父类构造方法就必定被调用了至少两次。

    相关文章

      网友评论

          本文标题:JAVA_super() 与 this() 必须放在构造函数第一

          本文链接:https://www.haomeiwen.com/subject/lfldiftx.html