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



Class 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;
}

1.) 现在我想添加一个B() {}这样的默认构造函数,但我不允许这样做。这是为什么呢?

您提供的代码无法编译,因为 B 中的这一行:

super(firstName);

这表明实际上,您的A类具有如下所示的构造函数:

public A(String firstName) {
this.firstName = firstName;
}

此时,尝试在B中声明新的构造函数将在没有super调用的情况下失败,因为A中没有无参数构造函数。

所以这将起作用:

B() {
super("Anonymous");
}

或者,可以将无参数构造函数添加到 A:

A() {
this("Anonymous");
}

。此时,您可以在 B 中使用B() {}

基本上,一旦你明白没有任何显式this(...)super(...)调用的构造函数等效于调用super()(即超类中的无参数构造函数),这一切都是有意义的。

在子类构造函数中,您调用了一个单参数超类构造函数,您没有声明该构造函数。将A(String firstName) { this.firstName = firstName; }添加到超类。或者,将 B 构造函数中的行super(firstName);替换为setFirstName(firstName);

首先,类 a 中没有将字符串作为参数的构造函数,并且您正在尝试从子类构造函数调用 super(名字)。

class A{
String firstName;
public aA(String firstname){
this.firstName= firstName;
}
}

最新更新