在我的驱动程序中,这一行给了我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);
}
答案
Account acct2 = new SavingsAccount (name);
acct2.calculateBalance();
这是因为虽然你有一个对象SavingsAccount
您正在使用类型的引用变量Account
所以你只能访问其中的那些方法Account
班级。
而你没有calculateBalance()
方法在你的Account
班级。
这就是为什么您无法访问它并且编译器抱怨它找不到名为的方法calculateBalance
因为它看到引用类型是Account
并且里面没有这样的方法Account
班级。
如果您想使用该方法,请将引用类型更改为SavingsAccount
:
SavingsAccount acct2 = new SavingsAccount (name);
或者您可以在访问该方法时显式转换它
((SavingsAccount) acct2).calculateBalance();
但要注意它可能会抛出ClassCastException
如果acct2
对象实际上不是对象SavingsAccount
UPDATE:
但请记住,在运行时,Java 使用虚拟方法调用根据实际实例动态选择将运行的方法的实际版本。