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

时间:2012-11-05 19:51:35

标签: 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{

    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() {},但我不允许这样做。这是为什么?

3 个答案:

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