如果你有一个子类,而你的子类只有构造函数是super(int x, int y)
但是那个参数结构与它的任何超类构造函数的参数结构都不匹配,那么会发生什么呢?子类如何调用它的超类构造函数?
在这种情况下使用super()
的默认构造函数吗?
或
this()
或super()
作为子类的第一行,是否仅使用默认构造函数? 答案 0 :(得分:2)
super contructor
,除了super有一个没有参数的“可见”构造函数。<强>样品:强>
父构造函数:
public Parent();
public Parent(int x, int y);
儿童构造者:
public Child() {
// invokes by default super() if there is no other super call.
}
public Child(int x, int y) {
// invokes by default super() if there is no other super call.
}
但是如果您将父构造函数定义为私有:
父构造函数:
private Parent();
public Parent(int x, int y);
儿童构造者:
public Child() {
// does not compile due there is no "visible" super().
}
public Child(int x, int y) {
// does not compile due there is no "visible" super().
}
您需要直接调用超级构造函数
public Child() {
super(1,2);
}
public Child(int x, int y) {
super(x,y);
}
答案 1 :(得分:1)
以下列模式从SubClass构造函数中调用SuperClass构造函数。
1 &gt; SuperClass没有默认构造函数,这意味着SuperClass有一个带参数的构造函数。例如
SuperClass(int a){
//somethin
}
您必须从子类构造函数显式调用超类构造函数,否则您的程序将无法编译。恩。
Subclass(){
super(10);
}
2 &gt; SuperClass有一个默认的构造函数,可以不定义任何构造函数或定义默认构造函数。在这种情况下,您不需要从子类1调用超级构造函数,但是如果您想调用它,则可以。
Subclass(){
super();
}
请记住,您只能从任何构造函数调用另一个构造函数。 离。
SubClass(){
super();
this(10);//this will not compile either you can call this or super
}