在我的驱动程序中,这一行给出了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);
}
答案 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()