3

我是 Java 新手,并且正在学习如何通过它。如果子类有参数构造函数,超类是否需要有参数构造函数,如果子类有参数构造函数而超类有默认的无参数构造函数会发生什么?

4

4 回答 4

1

这不是问题 - 但您可以super()在子类的构造函数中显式调用(作为子类构造函数中的第一条语句),或者让编译器为您执行 - 因为它隐式调用无参数构造函数(如果存在) 作为第一步。

做其中之一将“让班级知道”如何构建超级班级。

例子:

class A { 
//defaulut argumentless constructor is implicitly created
}

class B extends A {
  B(int x) { 
      super(); //invoking super()
      //rest of construction
  }
}
于 2012-11-26T06:43:11.277 回答
0

是的,即使您在父类中没有参数化构造函数,您也可以在子类中拥有参数化/参数化构造函数。这取决于您将在子类构造函数(默认/参数化)中做什么,是否可以调用父构造函数。

要调用父构造函数,请使用“super();” 在子构造函数的第一行。如果您将一些参数传递给此 super() 方法的参数,那么它将尝试调用父类的参数化构造函数。

尝试对这些概念进行一轮实践,你会更加完美:)。

于 2012-11-26T06:50:59.047 回答
0

简而言之:每个类只需要担心实例化自己。

如果超类有无参数构造函数而子类没有,那么子类就不需要向超类构造函数传递任何参数;只需调用它。但是,如果超类需要任何参数来实例化其任何成员,那么超类构造函数确实应该接受参数。

于 2012-11-26T06:42:54.490 回答
0

不,如果子类包含参数构造函数,则不需要在超类中具有参数构造函数。

基本上,如果您为子类创建对象,则构造函数将从超类执行,如果父类具有默认构造函数。如果超类不包含任何默认构造函数,编译器将提供自己的默认构造函数。

于 2012-11-26T06:48:04.267 回答