-3

この要件に基づいて次のコードをコンパイルしようとすると問題が発生します。

口座所有者の名前に対応する文字列を受け入れるコンストラクター。口座残高に対応する double を返す getBalance メソッド。double を受け入れ、アカウント残高から金額を差し引くメソッドを引き出します。次を含むサブクラス CheckingAccount のクラス定義を記述します。ブール型インスタンス変数、overdraft。(当座預金口座に当座貸越があると、現在の残高よりも大きな小切手を書くことができます)。String とブール値を受け入れるコンストラクター。String パラメーターはスーパークラス (BankAccount) コンストラクターの呼び出しに使用され、boolean は当座貸越インスタンス変数の初期化に使用されます。ブール値を返す hasOverdraft メソッド。アカウントが当座貸越をサポートしている場合、hasOverdraft は true を返します。方法、double を受け入れてブール値を返す clearCheck。clearCheck は、(小切手の) 金額が現金化できるかどうかを判断します。これは、金額が口座の残高よりも少ない場合、または口座が当座貸越を許可している場合に当てはまります。小切手を換金できる場合、clearCheck は true を返し、withdraw メソッドを呼び出して口座残高を更新します。それ以外の場合、clearCheck は false を返します。

コード:

public class CheckingAccount extends BankAccount {
private boolean overdraft; 

public CheckingAccount(String a, boolean overdraft) {
this.name = super.name;
this.overdraft = overdraft;}

boolean hasOverdraft() {if(overdraft); return true;}

boolean clearCheck(double checkAmount) {if(checkAmount < balance || hasOverdraft() == true); return true && withdraw();}
}

エラー:

CheckingAccount.java:4: error: constructor BankAccount in class BankAccount cannot be applied to given types;
public CheckingAccount(String a, boolean overdraft) {
                                                    ^
  required: String
  found: no arguments
  reason: actual and formal argument lists differ in length
CheckingAccount.java:5: error: name has private access in BankAccount
this.name = super.name;
    ^
CheckingAccount.java:5: error: name has private access in BankAccount
this.name = super.name;
                 ^
CheckingAccount.java:10: error: method withdraw in class BankAccount cannot be applied to given types;
boolean clearCheck(double checkAmount) {if(checkAmount < balance || hasOverdraft() == true); return true && withdraw();}
4

3 に答える 3

2

目に見えるBankAccount引数のないコンストラクターがないようです。エラー メッセージから、引数 a を 1 つ取るコンストラクタがあるように見えますString

したがって、 のコンストラクターで適切なコンストラクターを明示的に呼び出す必要がありますCheckingAccount。通常、これは次のようになります。

public CheckingAccount(String a, boolean overdraft) {
    super(a);
    this.overdraft = overdraft;
}

しかし、実際には、 が何Stringを表すと想定されているか、および何を表すと想定されているかによって異なりますa(これは、パラメータの非常にわかりやすい名前です)。

次に、nameフィールドが表示されBankAccountないように見えます。で宣言されたフィールドではないため、に割り当ててやろうとしていることはthis.name、とにかく意味がありません。nameCheckingAccount

第三に、withdraw()パラメーターが必要なようですが、何も提供していません。

于 2012-10-28T15:28:12.280 に答える
0
public class BankingAccount {
    protected String name;

    public BankingAccount(String n) { this.name = n; }
}


public class CheckingAccount extends BankingAccount {
    protected boolean overdraft;

    public CheckingAccount(String n, boolean overdraft) {
        super(n);
        this.overdraft = overdraft;
    }
}
于 2012-10-28T15:29:12.040 に答える
0
class CheckingAccount extends BankAccount {                

CheckingAccount(String name, boolean overdraft) {                    
super(name);                    
this.overdraft = overdraft;                }                

boolean hasOverdraft() {return overdraft;}                

boolean clearCheck(double amount) {
if (getBalance() >= amount || overdraft) {withdraw(amount);return true;}return false;} boolean overdraft;}
于 2012-10-28T16:04:52.903 に答える