2016-12-03 67 views
3

这里是我的抽象类:Java - 是否有可能有一个子类的构造函数只有1参数,这不涉及调用super()?

public abstract class BankAccount{ 
    protected long balance; 

    public BankAccount(long balance){ \\<--Abstract class constructor 
    this.balance = balance; 
    } 

    ... more stuff 
} 

我有以下的子类(也是一种额外的子类SavingsAccount,他们都拥有自己独立的平衡,而且是一个的关联):

public class CurrentAccount extends BankAccount{ 
    private int PIN; 
    private long overdraft = 0; 
    private long balance; 

    // Set balance and overdraft and the PIN 
    public CurrentAccount(long balance, long overdraft, int PIN){ 
    super(balance); 
    this.overdraft = overdraft; 
    setPIN(PIN); 
    } 


    // Set balance and overdraft 
    public CurrentAccount(long balance, long overdraft){ 
    super(balance); 
    this.overdraft = overdraft; 
    } 

    // Set overdraft only 
    public CurrentAccount(long overdraft){ \\<-- is it possible to have something like this? 
    super(balance); 
    this.overdraft = overdraft; 
    } 

    public void setPIN(int PIN){ 
    if(PIN >= 0000 && PIN <= 9999){ 
     this.PIN = PIN; 
    } 
    } 

    ... more methods 
} 

,你可以从上面看,我想要一个只是设置透支的构造函数,但是我仍然需要在每个构造函数的开始时调用super,所以我只是传入,不管目前是什么平衡,我可以这样做吗?或者我需要在我的CurrentAccount子类中有一个平衡变量吗?

当编译Java是给我这个:

CurrentAccount.java:41: error: cannot reference balance before supertype constructor has been called 
    super(balance); 
     ^
1 error 

任何帮助,将不胜感激。

回答

2

如果父类没有默认的(无参数)构造函数那么这意味着设计类必须与balance值进行初始化。

这意味着除非使用默认值初始化(例如super(0)),否则无法执行您正在绑定的任务。

错误是由于您在实际构造它之前访问超类的字段,这是您在子类中必须做的第一件事。

+0

如果我创建了一个无参数构造函数,它不应该做些什么吗?如果我让它做一些无用的事情,比如将一个无意义的变量设置为0,那么这会不会是糟糕的编程? – Physco111

+2

@ Physco111:这都是设计问题。在没有指定初始余额(默认为0)的情况下创建“BankAccount”是否有意义?如果答案是肯定的,那么你可以提供一个无参数的构造函数,它的初始化为0. – Jack

+0

好的,谢谢你,我会说你的答案对我来说意义最大。 – Physco111

-3

直到你的对象没有被构造变量的默认值将不会被设置,因此如果你希望他们的默认值在施工时被设置,使他们静态或明确地设置它们之前。

+0

不回答问题。 – EJP

+0

@EJP - 作为一个说明,你在这里编辑:http://stackoverflow.com/posts/40950921/revisions是相当幼稚的。请不要再这样。 –

相关问题