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