我是java的新手并通过它学习。 如果子类具有参数构造函数,是否有必要为超类使用参数构造函数,如果子类具有参数构造函数且超类具有默认的无参数构造函数,会发生什么?
答案 0 :(得分:1)
这不是问题 - 但你可以在子类的构造函数中显式调用super()
(作为子类'构造函数中的第一个语句),或让编译器为你做 - 因为它隐式调用无网段构造函数(如果存在)作为第一步。
执行其中一项将“让班级知道”如何构建超类。
示例:强>
class A {
//defaulut argumentless constructor is implicitly created
}
class B extends A {
B(int x) {
super(); //invoking super()
//rest of construction
}
}
答案 1 :(得分:0)
简而言之:每个班级只需要担心实例化。
如果超类有一个no-arg构造函数而子类没有,那么子类就不需要将任何参数传递给超类构造函数;只是调用它。但是,如果超类需要任何参数来实例化其任何成员,那么超类构造函数应该确实接受参数。
答案 2 :(得分:0)
如果子类包含参数构造函数,则不必在超类中使用参数构造函数。
基本上,如果为子类创建对象,则构造函数将从超类执行。如果父类具有默认构造函数。如果超类不包含任何默认构造函数,则编译器将提供其自己的默认构造函数。
答案 3 :(得分:0)
是的,你可以在子类中使用一个有争议/参数化的构造函数,即使你在父类中没有一个有争议的构造函数。这取决于你将在子类构造函数中做什么(默认/参数化),是否可以调用父类构造函数。
要调用父类构造函数,请使用'super();'在child的构造函数的第一行。如果将一些参数传递给此super()方法的参数,那么它将尝试调用父类的参数化构造函数。
尝试对这些概念进行一轮实践,你将会更加完美:)。