2012-11-21 10 views
7

私のドライバプログラムでは、この行は私にシンボルが見つかりませんでしたエラーです。なぜ、メソッドがSavingsAccountクラスで明確に定義され、私のドライバープログラムの他のすべてのメソッドには、それだけではなく、私はdouble型に変更しようとしましたが、それでもまだ動作しません。アカウントクラスから継承されます**を参照してください"シンボルを見つけることができません"メソッドが宣言されていますが、メソッドが宣言されています

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

SavingsAccountクラス:

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

**public void calculateBalance() 
{ 
    interestAmount = (accountBalance * yearlyInterestRate); 
    accountBalance += interestAmount; 
}** 

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

} 

Accountクラス、必要に応じて

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


} 

答えて

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

これがあるので、あなたはSavingsAccountのオブジェクトを持っているものの、タイプAccountのrefrence変数を使用しているため、そこにあるメソッドはAccountクラスです。

AccountクラスにはcalculateBalance()メソッドがありません。

あなたがそれにアクセスすることができませんし、コンパイラは、それが参照型がAccountで、Accountクラスの内部には、このような方法が存在しないことを見ているようcalculateBalanceという名前のメソッドを見つけることができないと文句を言い理由です。

SavingsAccount acct2 = new SavingsAccount (name); 

それとも、明示的にその方法

(SavingsAccount)acct2.calculateBalance(); 

にアクセスするときにそれを投げたが、それはClassCastExceptionを投げることができることを警告することができます:

あなたは、そのメソッドを使用する場合は

SavingsAccountに参照型を変更します acct2オブジェクトが実際にオブジェクトでない場合 SavingsAccount

UPDATE:

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

+0

私はそれが抽象的 – Aaron

+0

を行う能力を与えたと思いました私はコンセプトを完全にチェックしていませんでした – Abubakkar

+0

推測ですが、あなたはAccount'クラス 'で' withdraw'メソッドを定義しているので、多型の参照が私にTHOS – Aaron

1

てみ切り替え、

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

または(あなたがしたいと思う理由はわからない)に

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

、私はあなたがSavingsAccountacct2を唱えられると信じています。

0

「その他の方法はすべてAccountであり、SavingsAccountではありません。あなたはcCalculateBalanceを呼び出すために欠けている場合は、このようにそれを試してみてください。

(SavingsAccount)acct2.calculateBalance() 
関連する問題