Java 对super的调用必须是构造函数中的第一个语句,但它是

Java 对super的调用必须是构造函数中的第一个语句,但它是,java,constructor,super,Java,Constructor,Super,我一直收到一个错误,说“调用super必须是构造函数中的第一条语句” 问题是它是我的构造函数中的第一条语句 public void CheckingAccountCustomer(int a){ super(n, p, b); accountNo = a; } 这也是我的超类 public void customer(String n, int p, double b){ name = n; pin = p; balance = b; } 我做错了什么

我一直收到一个错误,说“调用super必须是构造函数中的第一条语句”

问题是它是我的构造函数中的第一条语句

public void CheckingAccountCustomer(int a){
    super(n, p, b);
    accountNo = a;
}
这也是我的超类

public void customer(String n, int p, double b){
    name = n;
    pin = p;
    balance = b;
}
我做错了什么

public void CheckingAccountCustomer(int a){
这不是一个构造函数,因为它声明它有一个
void
返回类型。它只是一个与类同名的方法。去掉返回类型

public CheckingAccountCustomer(int a){
此代码

public void customer(String n, int p, double b){
不是构造函数。构造函数没有返回类型,例如
void
。假设您的类名是
customer

public customer(String n, int p, double b){
这也适用于检查帐户客户

public void CheckingAccountCustomer(int a)
这是一个方法而不是构造函数,因为它有一个返回类型。

构造函数用于创建该类的实例,因此如果它允许用户更改返回类型,则没有意义(这也可能是危险的)。这就是为什么构造函数有no返回类型

public CheckingAccountCustomer(int a){

正如其他人已经回答的那样,删除返回类型,它将成为构造函数。

构造函数从不返回任何内容(void或Object类型)

public void CheckingAccountCustomer(int a){
    super(n, p, b);
    accountNo = a;
}

因此,它不是一个构造函数。

如果你简单地将措辞改为“你称之为构造函数?这是一个构造函数!”我将投票支持你给出的每一个答案。@ChrisCooney:我希望我和你一样聪明!:)@别难过。我敢打赌,我们大多数人在开始的时候都被这些“伪构造函数”绊倒了。不过,我敢打赌你再也不会这样做了。有趣的是,由于这些不是构造函数,对
super()
的调用试图从子类的方法内部调用父类的构造函数。错误消息说“这不是子构造函数中的第一行。”这是正确的,但没有太大帮助。也许像“调用超级不在构造函数中”这样的消息会很好。我绝对不希望这么快就能得到答案。当然,这是一个简单的解决办法,我太瞎了,看不见。不过,还是要感谢大家。请注意,虽然
customer
(带一个小C)是一个有效的类名,但它是不受欢迎的。按照惯例,类名必须以大写字母(
Customer
)开头,而方法名必须以小写字母开头。
public void CheckingAccountCustomer(int a){
    super(n, p, b);
    accountNo = a;
}