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。)现在我想添加一个默认的 like 构造函数,如B() {}
,但我不允许这样做。这是为什么?
答案 0 :(得分:9)
由于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()
(即超类中的无参数构造函数),这一切都是有意义的。< / p>
答案 1 :(得分:4)
在子类构造函数中,您调用一个单参数超类构造函数,您没有声明它。将A(String firstName) { this.firstName = firstName; }
添加到超类。或者,在B的构造函数中将行super(firstName);
替换为setFirstName(firstName);
。
答案 2 :(得分:1)
首先,在类a中没有构造函数,它将字符串作为参数,并且您尝试从ur子类构造函数调用super(名字)。
class A{
String firstName;
public aA(String firstname){
this.firstName= firstName;
}
}