抽象类/方法实现



我要用一个抽象方法computeIntt()来设计一个BankAcct类。储蓄和时间是两种银行账户。问题是我不能实现利息和新余额的显示

这是我当前的代码:

public abstract class BankAcct 
{
    private int accountNumber;
    private String accountName;
    private double bal;
    public BankAcct(int act, String name, double m)
    {
        accountNumber = act;
        accountName = name;
        bal = m;
    }
    public double getBalance()
    {
        return bal;
    }
    public String getAccountName()
    {
        return accountName;
    }
    public int getAccountNumber()
    {
        return accountNumber;
    }
    public void deposit(double m)
    {
            bal+=m;
    }
    public void withdraw(double m)
    {
        bal-=m;
    }
    public abstract double computeInt();
}

public class Save extends BankAcct 
{
    public Save(int act, String name, double m)
    {
        super(act, name, m);
    }
    int act;
    String name="";
    double m;
    public double computeInt()
    {
        return m * 0.0025;
    }
}

public class Time extends BankAcct 
{
    public Time(int act, String name, double m)
    {
        super(act, name, m);
    }
    int act;
    String name="";
    double m;
    public double computeInt()
    {
        return m * 0.033;
    }
}

public class MainPr 
{
    public static void main(String[] args)
    {
        BankAcct sav = new Savings(1234, "ABC", 10000);
        BankAcct td = new TimeDeposit(9876, "DEF", 20000);
        // display the current balance
    
        System.out.println(sav.getAccountName() + " with account number " +
                    sav.getAccountNumber() + " has a balance of " +
                    sav.getBalance());
    
        System.out.println(td.getAccountName() + " with account number " +
            td.getAccountNumber() + " has a balance of " +
            td.getBalance());
    
        // deposit money
    
        sav.withdraw(5000.0);
    
        // display current value with its interest
    
        System.out.println("n" + sav.getAccountName() + " with account number " +
            sav.getAccountNumber() + " earned an interest of " +
            sav.computeInt());
    
        System.out.println(sav.getAccountName() + " with account number " +
            sav.getAccountNumber() + " has a NEW BALANCE of " +
            sav.getBalance());
    
        td.deposit(2000.0);
    
        System.out.println("n" + td.getAccountName() + " with account number " +
            td.getAccountNumber() + " earned an interest of " +
            td.computeInt());
    
        System.out.println(td.getAccountName() + " with account number " +
            td.getAccountNumber() + " has a NEW BALANCE of " +
            td.getBalance());
    }
}

MainPr,它将为以下数据实例化两个对象:Save账号为1234;ABC的账户名称;余额10000。时间账号为9876;账户名;余额20000

这应该是输出:CORRECT ONE

账户1234的ABC余额为10000.0

账户9876的DEF余额为20000.0

账户编号为1234的ABC获得的利息为25.0

account number 1234的ABC有5025.0的新余额

账户9876的DEF已获得利息660.0

账户9876的DEF的NEW余额为22660.0

但是我的程序产生了错误的输出:

账户1234的ABC余额为10000.0

账户9876的DEF余额为20000.0

账户编号为1234的ABC获得的利息0.0

account number为1234的ABC的NEW balance为5000.0

账户9876的DEF已获利息0.0

账户9876的DEF有22000.0的新余额

在这种情况下,储蓄存款的利率为0.25%,而定期存款的利率为3.3%,余额取决于是存还是取。

请帮帮我。由于

你的实例变量m总是0(从未初始化)在你的子类,但他们看起来像他们被设置为bal在你的BankAcct类。这难道不适合你的computerInterest方法在TimeDeposit:

public double computeInterest() {
    return getBalance() * 0.033;
}
应该在其他子类中提供类似的修复,或者至少初始化您的m变量。在一个相关的注意事项上,你的子类不需要定义actname,因为你的超类BankAcct已经定义并存储了它。

同样,你的computerInterest没有修改你的余额,这似乎是你的程序所期望的。如果是这种情况,这样可能更合适:

public double computeInterest() {
    double interest = getBalance() * 0.033;
    deposit(interest);
    return interest;
}

最新更新