10

私のドライバー プログラムでは、この行でcannot find symbolエラーが発生し、その理由がわかりません。メソッドはSavingsAccountクラスで明確に定義されており、ドライバー プログラムで他のすべてのメソッドを参照できますが、そのメソッドだけを参照することはできません。タイプをdoubleなどに変更しようとしましたが、まだ機能しません。

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

SavingsAccountクラスはクラスから継承しAccountます:

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);

}
4

3 に答える 3

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

これは、オブジェクトがありSavingsAccountますが、タイプの参照変数を使用しているため、クラスAccountにあるメソッドにのみアクセスできるためです。Account

そして、クラスにcalculateBalance()メソッドがありません。Account

そのため、アクセスできず、コンパイラーcalculateBalance は、参照型があり、クラスAccount内にそのようなメソッドがないことがわかっているため、名前が付けられたメソッドが見つからないと不平を言います。Account

そのメソッドを使用する場合は、参照タイプを次のように変更しますSavingsAccount

SavingsAccount acct2 = new SavingsAccount (name);

または、そのメソッドにアクセスするときに明示的にキャストできます

((SavingsAccount) acct2).calculateBalance();

ただし、 object が実際にのオブジェクトではないClassCastException場合にスローされる可能性があることに注意してくださいacct2SavingsAccount

アップデート:

ただし、実行時に、Java は仮想メソッド呼び出しを使用して、実際のインスタンスに基づいて、実行されるメソッドの実際のバージョンを動的に選択することに注意してください。

于 2012-11-21T04:53:04.177 に答える
1

切り替えてみて、

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

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

または(なぜそうしたいのかわかりません)、 にキャストできると思いacct2ますSavingsAccount

于 2012-11-21T04:54:28.160 に答える