繁体   English   中英

Java 错误:class 中的构造函数事务无法应用于给定类型

[英]Java error: constructor Transaction in class Transaction cannot be applied to given types

我正在尝试回答以下提示:

编写一个具体的 class ZeroBalance,它扩展了抽象的 class 交易,其adjustAccount方法导致账户余额设置为零。 由于ZeroBalance class 不使用金额参数,因此您的 class 应该有一个只需要两个 arguments 的构造函数,并且它应该覆盖toString方法以便不提及任何金额。

我对编码很陌生,我对如何制作一个只需要两个 arguments 的构造函数感到困惑。

到目前为止,这是我的代码:

public class ZeroBalance extends Transaction
{
public ZeroBalance (String time, String date ) 
    {
        super(time, date);
    }



public boolean adjustAccount ( Account acc )
{
    acc.setBalance(0);
    return true;
}

}

这是帐户 class:

public class Account {
private String myName;
private double myBalance;

public Account ( String name, double balance )
{
    myName = name;
    myBalance = balance;
}

public String getName()
{
    return myName;
}

public void setName ( String name )
{
    myName = name;
}

public double getBalance()
{
    return myBalance;
}

public void setBalance( double balance )
{
    myBalance = balance;
}

public String toString()
{
    return "Account holder: " + myName + "; Current balance: $" + 
    myBalance;
}
}

这是事务 class:

public abstract class Transaction {
private double myAmount;
private String myTime;
private String myDate;

public Transaction ( double amount, String time, String date )
{
    myAmount = amount;
    myTime = time;
    myDate = date;
}

public double getAmount()
{
    return myAmount;
}

public String getTime ()
{
    return myTime;
}

public String getDate()
{
    return myDate;
}

public String toString()
{
    return getClass().getName() + " " + myAmount + " " + myTime + " " + 
    myDate;
}

public abstract boolean adjustAccount ( Account acc );
}

就像提到的jb-nizetshahaf一样,在调用带有缺少参数的基类构造函数时遇到问题。 您可以按以下方式解决此问题:

public class ZeroBalance extends Transaction
{

private static final double ZERO_BALANCE_AMOUNT = 0.0;    

public ZeroBalance (String time, String date ) 
    {
        super(time, date,ZERO_BALANCE_AMOUNT);
    }
// ....
// ....
}

然而

我实际上建议您将另一个构造函数添加到Transaction中,如下所示:

public abstract class Transaction {

private static final double ZERO_AMOUNT = 0.0;

private double myAmount;
private String myTime;
private String myDate;

public Transaction ( String time, String date )
{
    myAmount = ZERO_AMOUNT;
    myTime = time;
    myDate = date;
}

恕我直言,这似乎更为优雅,因为这使将来的Transaction扩展程序也可以从零余额开始。

我晚了 4 年,但我把它记下来以防有人需要找到它。 本质上,您需要确保覆盖toString并在super()中包含0

public class ZeroBalance extends Transaction{
    public ZeroBalance( String time, String date ){
        super( 0, time, date );
    }
    
    public String toString(){
        return getClass().getName() + " " + super.getTime() + " " + super.getDate();
    }
    
    public boolean adjustAccount(Account acc){
        acc.setBalance( 0 );
        return true;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM