“找不到符号:方法”但声明了方法

时间:2012-11-21 04:49:46

标签: java

在我的驱动程序中,这一行给出了cannot find symbol错误,我不知道为什么。该方法在SavingsAccount类中明确定义,我可以参考我的驱动程序中的所有其他方法但不是那个,我尝试将类型更改为double等,但仍然无法正常工作

Account acct2 = new SavingsAccount (name);
acct2.calculateBalance();

SavingsAccount类继承自Account class:

public class SavingsAccount extends Account
{
    private final short minBalance = 0;
    private double overdraftFee;
    private double yearlyInterestRate = 0.02;
    private double interestAmount;

    public SavingsAccount (String name)
    {
        super(name);
    }

    public double withdraw (double amount)
    {
        if (accountBalance - amount >= minBalance)
        {
            accountBalance -= amount;
            System.out.print ("Withdraw Successful");
        }
        else 
        {
            accountBalance -= amount;
            overdraftFee = accountBalance * (0.10);
            accountBalance += overdraftFee;
            System.out.print ("Withdraw Succesful, however overdraft fee of 10% has been applied to your account");


        }

        return accountBalance;
    }

// ----------------- this is the method I try to invoke -----------------------------
    public void calculateBalance ()
    {
        interestAmount = (accountBalance * yearlyInterestRate);
        accountBalance += interestAmount;
    }
// ----------------------------------------------------------------------------------

    public String toString()
    {
        return super.toString() + " Interest Received: " + interestAmount;
    }


}

帐户类,如果需要

import java.util.Random;
import java.text.NumberFormat;

public abstract class Account
{
    protected double accountBalance;
    protected long accountNumber;
    protected String accountHolder;
    public Account (String name)
    {
        accountHolder = name;
        accountBalance = 0;
        Random accountNo = new Random();
        accountNumber  = accountNo.nextInt(100000);
    }

    public double deposit (double amount)
    {
        accountBalance += amount;

        return accountBalance;
    }

    public String toString()
    {
        NumberFormat accountBal = NumberFormat.getCurrencyInstance();
        return "Account Balance: " + accountBal.format(accountBalance) + "\nAccount Number: " + accountNumber;
    }

    public String getAccountHolder()
    {
        return accountHolder;
    }

    public double getAccountBalance()
    {
        return accountBalance;
    }

    public abstract double withdraw (double amount);

}

3 个答案:

答案 0 :(得分:7)

Account acct2 = new SavingsAccount (name);
acct2.calculateBalance();

这是因为虽然您有一个SavingsAccount对象,但您使用的是Account类型的引用变量,因此您只能访问Account类中的那些方法。

您的calculateBalance()课程中没有Account方法。

这就是为什么你无法访问它并且编译器抱怨它无法找到名为calculateBalance的方法,因为它看到引用类型是Account并且Account内没有这样的方法} class。

如果您想使用该方法,请将引用类型更改为SavingsAccount

SavingsAccount acct2 = new SavingsAccount (name);

或者您可以在访问该方法时显式转换它

((SavingsAccount) acct2).calculateBalance();

但请注意,如果ClassCastException对象实际上不是acct2

的对象,它可以抛出SavingsAccount

<强>更新

但是 请记住,在运行时,Java会动态使用虚方法调用 根据实际实例选择将运行的方法的实际版本。

答案 1 :(得分:1)

尝试切换,

Account acct2 = new SavingsAccount (name);
acct2.calculateBalance();

SavingsAccount acct2 = new SavingsAccount (name);
acct2.calculateBalance();

或(不确定为什么你会这样),我相信你可以将acct2投射到SavingsAccount

答案 2 :(得分:0)

“所有其他方法”来自Account,而不是SavingsAccount。当您想要致电cCalculateBalance时,请尝试这样:

(SavingsAccount)acct2.calculateBalance()