不允许包含默认构造函数-Java基础
A类:不允许包含默认构造函数-Java基础,java,Java,A类: public class A { private String firstName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } B类: public class B extends A{
public class A {
private String firstName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
B类:
public class B extends A{
private int billNum;
B(String firstName, String billNum) {
super(firstName);
setBillNum(billNum);
}
public int getBillNumr() {
return billNum;
}
public void setBillNum(int billNum) {
this.billNum = billNum;
}
一,。现在我想添加一个类似于B{}的默认构造函数,但不允许这样做。为什么会这样?在子类构造函数中,您调用了一个单参数超类构造函数,但没有声明它。将AString firstName{this.firstName=firstName;}添加到超类中。或者,替换行superfirstName;使用setFirstNamefirstName;在B.的构造函数中在子类构造函数中,您调用了一个单参数超类构造函数,您没有声明它。将AString firstName{this.firstName=firstName;}添加到超类中。或者,替换行superfirstName;使用setFirstNamefirstName;在B的构造函数中,由于B中的这一行,您提供的代码将无法编译:
super(firstName);
这表明,实际上,您的A类有一个如下构造函数:
public A(String firstName) {
this.firstName = firstName;
}
在这一点上,尝试在B中声明一个新的构造函数将在没有超级调用的情况下失败,因为a中没有无参数的构造函数
因此,这将起作用:
B() {
super("Anonymous");
}
或者,您可以将无参数构造函数添加到:
A() {
this("Anonymous");
}
。。。在这一点上,您可以在B中使用B{}
基本上,一旦你理解了一个构造函数没有任何显式的。。。或者超级。。。调用相当于调用super,即超类中的无参数构造函数,这一切都是有意义的。您提供的代码将无法编译,因为B中有一行:
super(firstName);
这表明,实际上,您的A类有一个如下构造函数:
public A(String firstName) {
this.firstName = firstName;
}
在这一点上,尝试在B中声明一个新的构造函数将在没有超级调用的情况下失败,因为a中没有无参数的构造函数
因此,这将起作用:
B() {
super("Anonymous");
}
或者,您可以将无参数构造函数添加到:
A() {
this("Anonymous");
}
。。。在这一点上,您可以在B中使用B{}
基本上,一旦你理解了一个构造函数没有任何显式的。。。或者超级。。。调用相当于调用super,即超类中的无参数构造函数,这一切都是有意义的。首先,类a中没有以字符串为参数的构造函数,您试图从子类构造函数调用superfirst名称
class A{
String firstName;
public aA(String firstname){
this.firstName= firstName;
}
}
首先,类a中没有以字符串作为参数的构造函数,您试图从子类构造函数调用superfirst名称
class A{
String firstName;
public aA(String firstname){
this.firstName= firstName;
}
}
你有什么问题?如果在a类中没有任何0-arg构造函数,您是否在其中放入了超级调用来显式调用类的1-arg构造函数?您遇到了什么问题?您是否在其中添加了超级调用,以显式调用类的1-arg构造函数,以防在a-class中没有任何0-arg构造函数?我添加了一个将1个参数带到类a的构造函数。现在您希望我替换superfirstName;使用setFirstNamefirstName?当我尝试这样做时,我得到了这个错误,隐式超级构造函数A是未定义的。必须显式调用另一个构造函数或交替输入关键字。这意味着要么做一个,要么做另一个,但不要同时做两个。我添加了一个构造函数,该构造函数将1个参数带到类a。现在您希望我替换superfirstName;使用setFirstNamefirstName?当我尝试这样做时,我得到了这个错误,隐式超级构造函数A是未定义的。必须显式调用另一个构造函数或交替输入关键字。意思是要么做一个,要么做另一个,但不要同时做两个。