父类中定义一个有参数的构造函数,现在有个子类继承父类,是不是必须得在子类中自己定义一个有参数的super()函数呢?  那么子类中可不可以不定义构造函数呢?

解决方案 »

  1.   

    我是想说   如果父类中定义了一个构造函数并且是有参数的,那么子类继承父类的时候用不用写调用父类的super()有参函数,如果写的话是不是一定要写在子类的构造函数内呢?
      

  2.   

    我是想说 如果父类中定义了一个构造函数并且是有参数的,那么子类继承父类的时候用不用写调用父类的super()有参函数,如果写的话是不是一定要写在子类的构造函数内呢?
      

  3.   

    一定要的.
    子类的构造函数的第一句要么是this(XXX),要么是super(XXX).其实对于父类来说,有4种情况:
    1 无任何构造函数
      这时实际上是有默认的(即无参数构造函数),这时子类的构造函数能够调用此默认构造函数. 子类怎么调用呢? 在构造函数里不用写super()(写上也可以),默认去调用了。2 只有一个无参构造函数
      这和第一种情况一样。3 只有有参构造函数
      这时因为父类有了构造函数,那就不存在默认的无参构造函数了。此时子类的构造函数的必须要有super(args)语句了。第一条语句如果不是super(args),那一定是this(***)语句。如果第一条语句既不是super(args),也不是this(xxx),那就是一个隐式的super()语句,但父类没有这个无参构造函数了,所以一定报错。4 既有无参构造函数,又有有参构造函数。
      这时最方便了,子类的构造函数里即使没有super(args)或this(xxx),也不会报错了,因为如果没有this(xxx),也没有super(args), 系统会调用super(),而父类里有这个构造函数。所以许多书上告诉我们,如果设计一个将被继承的类,最好有无参构造函数。