0

私はJavaの基礎を学ぼうとしている初心者プログラマーです。基本的に、bankクラスのメソッドprintBankSummary()およびaccrueInterestAllAccounts()により、この問題が発生します。コードは次のとおりです。

public class Bank {

  private String name;
  private SavingsAccount [] accounts;
  private int totalAccounts;
  public static final int MAX_ACCOUNTS  = 20;

  public Bank(String name) {
    this.name = name;
    totalAccounts = 0;
    accounts = new SavingsAccount[MAX_ACCOUNTS];
}

  public void printBankSummary() {
   System.out.println("Bank name: " + getName());
   BankAccount.printAccountInfo(); //non-static method cannot be referenced from a static context error
  }

  public void accrueInterestAllAccounts() {
    SavingsAccount.accrueInterest(); //non-static method cannot be referenced from a static context error
  }

  public static void main (String args[]) {
    Bank x = new BankAccount("Java S&L");

    x.printBankSummary();
    x.accrueInterestAllAccounts();
  }
4

3 に答える 3

1

メソッドはインスタンス メソッドです。クラスのインスタンスで動作しますSavingsAccount

を呼び出すと、Java に静的メソッドとして呼び出すようSavingsAccount.printAccountInfo()に指示されます。あなたは基本的にJavaに「このメソッドはSavingsAccountクラスで見つけることができ、それを使用するためにSavingsAccountのインスタンスは必要ありません.」と伝えています。printAccountInfo()

おそらくやりたいことは、印刷したいアカウント情報を持つクラスのインスタンスを見つけることです。SavingsAccountこのインスタンスが variablexにあるとしましょうx.printAccountInfo()
への呼び出しでも同じことが起こりますaccrueInterest

于 2012-10-12T22:14:35.827 に答える
0
 BankAccount.printAccountInfo();

は静的メソッド (クラスからアクセス) であるため、それを呼び出すメソッドも静的でない限りアクセスできません。それ以外の

 public void printBankSummary() {
       System.out.println("Bank name: " + getName());
       BankAccount.printAccountInfo();
      }

どうですか

    public void printBankSummary() {
       System.out.println("Bank name: " + getName());
//calls printAccountInfo on the instance that called printBankSummary()
       printAccountInfo();
      }

そして、

public void accrueInterestAllAccounts() {
    SavingsAccount.accrueInterest();
  }

Class.Method を呼び出すことはできません。やりたいことは

    public void accrueInterestAllAccounts() {
for(Account acc: Accountarr) {            
            acc.accrueInterest();
          }
}
于 2012-10-12T22:14:48.003 に答える
0

簡単な答え: Java の静的型の性質上、静的メソッド/変数を参照するメソッドも静的でなければなりません。

これを回避するには、クラスのソース ファイルに public static void main(String args[]) メソッドがないように、クラスとテスト プログラムを分離します。次に、問題の原因となっている 2 つのメソッドをテスト クラス内に配置し、それらのメソッド宣言を変更して静的にすることができます。

問題のある 2 つのメソッドをインスタンス メソッドにしたい場合は、クラスの新しいインスタンスを作成し、そのように呼び出す必要があります。

于 2012-10-12T22:15:05.340 に答える