不允许包含默认构造函数-Java基础

不允许包含默认构造函数-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{

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是未定义的。必须显式调用另一个构造函数或交替输入关键字。意思是要么做一个,要么做另一个,但不要同时做两个。